package secret

import (
	"encoding/hex"
	"errors"
	"fmt"
	"fonchain-fiee/pkg/utils/secret/aes"
	"strings"
)

func GetPositionCode(positionName string) string {
	code := "other"
	positionMap := map[string]string{"宣传部": "xcb", "鉴证科": "jzk", "经纪人": "jjr", "普通用户": "com"}

	if v, ok := positionMap[positionName]; ok {
		code = v
	}

	return code
}

func CombineSecret(position, name, toke string) (string, error) {
	abc := position + "(~!@)" + name + "(~!@)" + toke
	b, err := aes.AesEcrypt([]byte(abc), aes.PwdKey)
	if err != nil {
		return "", errors.New("解析错误")
	}

	return hex.EncodeToString(b), nil
}

func getToken(token string) (string, error) {

	if strings.Contains(token, "(~!@)") == false {
		return "", errors.New("解析错误")
	}

	str1 := strings.Split(token, "(~!@)")

	if len(str1) != 3 {
		return "", errors.New("解析数量错误")
	}

	return str1[2], nil
}

func GetJwtFromStr(authorization string) (string, error) {

	tokenByte, err := hex.DecodeString(authorization)
	if err != nil {
		return "", err
	}
	defer func() {
		if msg := recover(); msg != nil {
			fmt.Println("panic信息:", msg, "---recover恢复---")
		}
	}()

	token, err := aes.AesDeCrypt(tokenByte, aes.PwdKey)

	if err != nil {
		return "", err
	}

	//解密下
	jwt, err := getToken(string(token))

	if err != nil {
		return "", err
	}

	return jwt, nil

}

func CommonCombineSecret(abc string) (string, error) {
	b, err := aes.AesEcrypt([]byte(abc), aes.PwdKey)
	if err != nil {
		return "", errors.New("解析错误")
	}

	return hex.EncodeToString(b), nil
}

func CommonDec(abc string) (string, error) {

	tokenByte, err := hex.DecodeString(abc)
	if err != nil {
		return "", err
	}
	defer func() {
		if msg := recover(); msg != nil {
			fmt.Println("panic信息:", msg, "---recover恢复---")
		}
	}()

	token, err := aes.AesDeCrypt(tokenByte, aes.PwdKey)

	if err != nil {
		return "", err
	}

	return string(token), nil

}