// Package consts
// @Link  https://github.com/bufanyun/hotgo
// @Copyright  Copyright (c) 2023 HotGo CLI
// @Author  Ms <133814250@qq.com>
// @License  https://github.com/bufanyun/hotgo/blob/master/LICENSE
package consts

import (
	"github.com/gogf/gf/v2/util/gconv"
)

// RequestEncryptKey
// 请求加密密钥用于敏感数据加密，16位字符，前后端需保持一致
// 安全起见，生产环境运行时请注意修改
var RequestEncryptKey = []byte("f080a463654b2279")

// 配置数据类型
const (
	ConfigTypeString      = "string"
	ConfigTypeInt         = "int"
	ConfigTypeInt8        = "int8"
	ConfigTypeInt16       = "int16"
	ConfigTypeInt32       = "int32"
	ConfigTypeInt64       = "int64"
	ConfigTypeUint        = "uint"
	ConfigTypeUint8       = "uint8"
	ConfigTypeUint16      = "uint16"
	ConfigTypeUint32      = "uint32"
	ConfigTypeUint64      = "uint64"
	ConfigTypeFloat32     = "float32"
	ConfigTypeFloat64     = "float64"
	ConfigTypeBool        = "bool"
	ConfigTypeDate        = "date"
	ConfigTypeDateTime    = "datetime"
	ConfigTypeSliceString = "[]string"
	ConfigTypeSliceInt    = "[]int"
	ConfigTypeSliceInt64  = "[]int64"
)

var ConfigTypes = []string{ConfigTypeString,
	ConfigTypeInt, ConfigTypeInt8, ConfigTypeInt16, ConfigTypeInt32, ConfigTypeInt64,
	ConfigTypeUint, ConfigTypeUint8, ConfigTypeUint16, ConfigTypeUint32, ConfigTypeUint64,
	ConfigTypeFloat32, ConfigTypeFloat64,
	ConfigTypeBool,
	ConfigTypeDate, ConfigTypeDateTime,
	ConfigTypeSliceString, ConfigTypeSliceInt, ConfigTypeSliceInt64,
}

// ConfigMaskDemoField 演示环境下需要隐藏的配置
var ConfigMaskDemoField = map[string]struct{}{
	// 邮箱
	"smtpUser": {}, "smtpPass": {},

	// 云存储
	"uploadUCloudPublicKey": {}, "uploadUCloudPrivateKey": {}, "uploadCosSecretId": {}, "uploadCosSecretKey": {},
	"uploadOssSecretId": {}, "uploadOssSecretKey": {}, "uploadQiNiuAccessKey": {}, "uploadQiNiuSecretKey": {},

	// 地图
	"geoAmapWebKey": {},

	// 短信
	"smsAliYunAccessKeyID": {}, "smsAliYunAccessKeySecret": {}, "smsTencentSecretId": {}, "smsTencentSecretKey": {},

	// 支付
	"payWxPayMchId": {}, "payWxPaySerialNo": {}, "payWxPayAPIv3Key": {}, "payWxPayPrivateKey": {}, "payQQPayMchId": {}, "payQQPayApiKey": {},

	// 微信
	"officialAccountAppSecret": {}, "officialAccountToken": {}, "officialAccountEncodingAESKey": {}, "openPlatformAppSecret": {},
	"openPlatformToken": {}, "openPlatformEncodingAESKey": {},
}

// ConvType 类型转换
func ConvType(val interface{}, t string) interface{} {
	switch t {
	case ConfigTypeString:
		val = gconv.String(val)
	case ConfigTypeInt:
		val = gconv.Int(val)
	case ConfigTypeInt8:
		val = gconv.Int8(val)
	case ConfigTypeInt16:
		val = gconv.Int16(val)
	case ConfigTypeInt32:
		val = gconv.Int32(val)
	case ConfigTypeInt64:
		val = gconv.Int64(val)
	case ConfigTypeUint:
		val = gconv.Uint(val)
	case ConfigTypeUint8:
		val = gconv.Uint8(val)
	case ConfigTypeUint16:
		val = gconv.Uint16(val)
	case ConfigTypeUint32:
		val = gconv.Uint32(val)
	case ConfigTypeUint64:
		val = gconv.Uint64(val)
	case ConfigTypeFloat32:
		val = gconv.Float32(val)
	case ConfigTypeFloat64:
		val = gconv.Float64(val)
	case ConfigTypeBool:
		val = gconv.Bool(val)
	case ConfigTypeDate:
		val = gconv.Time(val, "Y-m-d")
	case ConfigTypeDateTime:
		val = gconv.Time(val, "Y-m-d H:i:s")
	case ConfigTypeSliceInt:
		val = gconv.SliceInt(val)
	case ConfigTypeSliceInt64:
		val = gconv.SliceInt64(val)
	case ConfigTypeSliceString:
		val = gconv.SliceStr(val)
	default:
		val = gconv.String(val)
	}
	return val
}
