package api

import (
	"PaymentCenter/app/constants/errorcode"
	"PaymentCenter/app/models/appmodel"
	"PaymentCenter/app/services"
	"PaymentCenter/app/services/apicrypt"
	"encoding/json"
)

func EnCrypt(app *appmodel.App, data interface{}) ([]byte, int) {
	appCheck := services.NewAppCheck(app)
	cryptFunc := appCheck.Crypt()
	if cryptFunc == nil {
		return nil, appCheck.Code
	}
	dataByte, err := json.Marshal(data)
	if err != nil {
		return nil, errorcode.AppAesEncryptFail
	}

	encryptData, errCode := cryptFunc(appCheck.App).Encrypt(string(dataByte))
	if errCode != apicrypt.CryptNotError {
		return nil, errCode
	}
	return encryptData, errorcode.Success
}

func DeCrypt(app *appmodel.App, data string, aesKey string) ([]byte, int) {
	appCheck := services.NewAppCheck(app)
	cryptFunc := appCheck.Crypt()
	if cryptFunc == nil {
		return nil, appCheck.Code
	}
	dataByte, errCode := cryptFunc(app).Decrypt(data)
	if errCode != apicrypt.CryptNotError {
		return nil, errCode
	}
	if len(dataByte) == 0 {
		return nil, errorcode.AppDeEncryptFail
	}

	return dataByte, errorcode.Success
}