package common

import (
	"crypto/md5"
	"encoding/hex"
	"github.com/syyongx/php2go"
	"strconv"
)

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

//非精确匹配,字符串截取向下80%,5个字符以下不截,5-10个截一个,10-20个向下取80%,20个以上向下取70%
func SubKeyWordStr(str string) string {
	strLen := len(str)
	strLenFloat := float64(strLen)
	if strLen < 5 {
		return str
	}
	if strLen >= 5 && strLen <= 10 {
		str = php2go.Substr(str, 0, strLen-1)
	}
	if strLen > 10 && strLen <= 20 {
		num := php2go.Floor(strLenFloat * 0.2)
		str = php2go.Substr(str, 0, strLen-int(num))
	}
	if strLen > 20 {
		num := php2go.Floor(strLenFloat * 0.3)
		str = php2go.Substr(str, 0, strLen-int(num))
	}
	return str
}

//转成字符串的方法
func ToString(a interface{}) string {
	if v, p := a.(int); p {
		return strconv.Itoa(v)
	}
	if v, p := a.(int16); p {
		return strconv.Itoa(int(v))
	}
	if v, p := a.(int32); p {
		return strconv.Itoa(int(v))
	}
	if v, p := a.(uint); p {
		return strconv.Itoa(int(v))
	}
	if v, p := a.(float32); p {
		return strconv.FormatFloat(float64(v), 'f', -1, 32)
	}
	if v, p := a.(float64); p {
		return strconv.FormatFloat(v, 'f', -1, 32)
	}
	return "change to String error"
}