package fpe

import (
	"errors"

	"xdx.jelly/xgcl/sm/sm4"
)

// return the check code of id.
func checkCodeOfID(id0 string) byte {
	panic("todo")
}

// EncryptID 加密身份证号。最后一位为校验位。
// key为SM4密钥，16字节
// tweak随机数，任意长度，可明文保存。
func EncryptID(id string, key []byte, tweak []byte) (string, error) {
	if len(id) != 18 {
		return "", errors.New("wrong id")
	}

	if len(key) != 16 {
		return "", errors.New("wrong key")
	}
	b, err := sm4.NewCipher(key)
	if err != nil {
		return "", err
	}
	f := NewFF1(b, Numeric)
	numerals, err := f.Encode(id[:len(id)-1])
	if err != nil {
		return "", err
	}
	cipher, err := f.Encrypt(tweak, numerals)
	if err != nil {
		return "", err
	}
	encryptedID, err := f.Decode(cipher)
	if err != nil {
		return "", err
	}
	// TODO: add the check code

	return encryptedID, nil

}

// 加密纯数字的手机号
func EncryptPhoneNumber(phoneNumber string, key []byte, tweak []byte) (string, error) {

	panic("todo")
}
