package apikeygenerator

import (
	"encoding/hex"

	"github.com/tidbcloud/pkgv2/secret/encrypt"
	"github.com/tidbcloud/tiinf/errs"
)

type ApiKeyGenerator struct {
	secretIv  string
	encrypter *encrypt.AESCrypt
}

var apiKeyGenerator = &ApiKeyGenerator{}

func InitEncrypter(secretKey string, secretIv string) error {
	encrypter, err := encrypt.NewAESCrypt([]byte(secretKey))
	if err != nil {
		return errs.NewInternalPanic("init Encrypt failed.", err)
	}
	apiKeyGenerator.encrypter = encrypter
	apiKeyGenerator.secretIv = secretIv
	return nil
}

func Encrypt(data string) string {
	crypted := apiKeyGenerator.encrypter.EncryptWithIv([]byte(data), []byte(apiKeyGenerator.secretIv))
	return hex.EncodeToString(crypted)
}

func Decrypt(data string) (string, error) {
	crypted, err := hex.DecodeString(data)
	if err != nil {
		return "", errs.NewBadRequest("failed to decode secret key as hex", err)
	}
	privateKey := apiKeyGenerator.encrypter.DecryptWithIv(crypted, []byte(apiKeyGenerator.secretIv))
	return string(privateKey), nil
}
