package common

import (
	"regexp"

	"golang.org/x/crypto/bcrypt"
)

// Define the regex pattern as a constant
const (
	pinPattern = `^\d{4}$`
)

// checks whether the given input is a 4 digit number
func IsValidPIN(pin string) bool {
	match, _ := regexp.MatchString(pinPattern, pin)
	return match
}

// HashPIN uses bcrypt with 8 salt rounds to hash the PIN
func HashPIN(pin string) (string, error) {
	hash, err := bcrypt.GenerateFromPassword([]byte(pin), 8)
	if err != nil {
		return "", err
	}
	return string(hash), nil
}

// VerifyPIN compareS the hashed PIN with the plaintext PIN
func VerifyPIN(hashedPIN, pin string) bool {
	err := bcrypt.CompareHashAndPassword([]byte(hashedPIN), []byte(pin))
	return err == nil
}