package main

import (
	"os"
	"path/filepath"
	"fmt"
	"crypto/sha256"
	"encoding/hex"
	"encoding/binary"
	"io"
)

func main() {
	println("Kuferek 1.0")

	if len(os.Args) > 1 {
		scanDir(os.Args[1])
	} else {
		scanDir("/home/mrp/Pictures")
	}
}

func scanDir(dir string) {
	fmt.Printf("Scanning: %s", dir)
	visit := func(path string, f os.FileInfo, err error) error {
		if f.IsDir() && path != dir {
			scanDir(path)
			return filepath.SkipDir
		}
		if f.Mode().IsRegular() {
			fmt.Printf("Visited: %s Size: %d bytes, Sha256: %s\n",
				path, f.Size(), fileSha256(path))
		}
		return nil
	}

	filepath.Walk(dir, visit)
}

func fileSha256(filePath string) (result string) {
	file, err := os.Open(filePath)
	if err != nil {
		return
	}
	defer file.Close()

	fileStat, err := file.Stat()
	if err != nil {
		return
	}

	hash := sha256.New()

  if _, err = io.Copy(hash, file); err != nil {
		return
	}

	result = hex.EncodeToString(hash.Sum(nil))
	return
}