package utils

import (
	"crypto/md5"
	"fmt"
	"io"
	"os"
)

// Compare file md5
func CompareFileMd5(file, md5 string) (bool, error) {
	fileMd5, err := GetFileMd5(file)
	if err != nil {
		return false, err
	}
	return fileMd5 == md5, nil
}

// GetFileMd5
func GetFileMd5(file string) (string, error) {
	f, err := os.Open(file)
	if err != nil {
		return "", err
	}
	defer f.Close()

	h := md5.New()
	if _, err := io.Copy(h, f); err != nil {
		return "", err
	}

	return fmt.Sprintf("%x", h.Sum(nil)), nil
}

// GetFileSize
func GetFileSize(file string) (int64, error) {
	fi, err := os.Stat(file)
	if err != nil {
		return 0, err
	}
	return fi.Size(), nil
}
