package utils

import (
	"crypto/md5"
	"encoding/hex"
	"os"
	"strconv"
	"time"
)

func UnUsed(v ...interface{}) {
	return
}

func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

func CreateDirAll(path string) error {
	if ok, err := PathExists(path); !ok {
		if err != nil {
			return err
		}
		os.MkdirAll(path, 0666)
	}
	return nil
}

func ErrPanic(err error) {
	if err != nil {
		panic(err)
	}
}

func Md5(d []byte) string {
	hasher := md5.New()
	hasher.Write(d)
	return hex.EncodeToString(hasher.Sum(nil))
}

func AsyncWait(timeout time.Duration, callback func(interface{}), param interface{}) *time.Timer {
	tm := time.NewTimer(timeout)
	go func() {
		select {
		case <-tm.C: // timeout
			callback(param)
		}
	}()

	return tm
}

// 封装 strconv.ParseInt(), 主要处理 空字符串转换为 0 (compatible with C)
// eg. 当 redis 中保存一个数值, 未设置可认为是 0 的情况
func StrToInt64(s string) (int64, error)  {
	if len(s) == 0 {
		return  0, nil
	}
	return strconv.ParseInt(s, 10, 64)
}

func ValidGameId(gameId int64) bool {
	return gameId > 1000
}

func Sum(a int64, b ...int64) int64 {
	var sum = a
	for _, x := range b {
		sum += x
	}

	return sum
}