package validationUtil

import (
	"errors"

	"goutil/stringUtil"
)

const (
	MaxInt32 int = 0x7fffffff
	MinInt32 int = -0x7fffffff
)

// 检查数值范围
// errList:错误列表
// val:待检查的值
// min:最小值
// max:最大值
// msg:错误提示
// 返回值:
// bool:是否在范围内
func CheckIntRange(errList *([]error), val int, min int, max int, msg string) bool {
	if val < min || val > max {
		if errList != nil {
			*errList = append(*errList, errors.New(msg))
		}

		return true
	}

	return false
}

// 检查数值范围
// errList:错误列表
// val:待检查的值
// min:最小值
// max:最大值
// msg:错误提示
// 返回值:
// bool:是否在范围内
func CheckFloatRange(errList *([]error), val float64, min float64, max float64, msg string) bool {
	if val < min || val > max {
		if errList != nil {
			*errList = append(*errList, errors.New(msg))
		}

		return true
	}

	return false
}

// 检查字符串是否为空
// errList:错误列表
// val:待检查的值
// msg:错误提示
// 返回值:
// bool:是否在范围内
func Require(errList *([]error), val string, msg string) bool {
	if stringUtil.IsEmpty(val) {
		if errList != nil {
			*errList = append(*errList, errors.New(msg))
		}

		return true
	}

	return false
}

// 检查数据是否存在重复项(此函数效率较低，如有效率要求请不要调用此函数)
func IsDistinct(count int, isEqualFunc func(i, j int) bool) bool {
	for i := 0; i < count; i++ {
		for j := 0; j < count; j++ {
			if i == j {
				continue
			}

			if isEqualFunc(i, j) {
				return false
			}
		}
	}

	return true
}
