package util

import (
	"fmt"
	"math/rand"
	"strconv"
	"time"
)

//human readable file size
func HumanFileSize(bytes int64) string {
	var thresh int64 = 1024

	if bytes < 0 {
		bytes = 0
	}
	if bytes < thresh {
		return fmt.Sprintf("%dB", bytes)
	}
	var units = []string{"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"}

	var u = 0
	var tmp = float64(bytes)
	var standard = float64(thresh)
	for tmp >= standard && u < len(units)-1 {
		tmp /= float64(standard)
		u++
	}

	numStr := strconv.FormatFloat(tmp, 'f', 1, 64)

	return fmt.Sprintf("%s%s", numStr, units[u])
}

//get mysql url.
func GetMysqlUrl(
	mysqlPort int,
	mysqlHost string,
	mysqlSchema string,
	mysqlUsername string,
	mysqlPassword string,
	mysqlCharset string) string {

	if mysqlCharset == "" {
		mysqlCharset = "utf8"
	}

	return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local", mysqlUsername, mysqlPassword, mysqlHost, mysqlPort, mysqlSchema, mysqlCharset)
}

//get random number 4.
func RandomNumber4() string {
	return fmt.Sprintf("%04v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31()%10000)
}

//get random 4 string
func RandomString4() string {

	//0 and o, 1 and l are not easy to distinguish
	var letterRunes = []rune("abcdefghijkmnpqrstuvwxyz23456789")

	r := rand.New(rand.NewSource(time.Now().UnixNano()))

	b := make([]rune, 4)
	for i := range b {
		b[i] = letterRunes[r.Intn(len(letterRunes))]
	}

	return string(b)
}
