package auth

import (
	"fmt"
	"strings"

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

const bcryptCost = 12

func HashPassword(password string) (string, error) {
	if strings.TrimSpace(password) == "" {
		return "", fmt.Errorf("password is required")
	}

	if len(password) > 72 {
		return "", fmt.Errorf("password must be 72 bytes or fewer")
	}

	hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcryptCost)
	if err != nil {
		return "", fmt.Errorf("hash password: %w", err)
	}

	return string(hashedPassword), nil
}

func ComparePassword(hash, password string) error {
	if hash == "" {
		return fmt.Errorf("password hash is required")
	}

	return bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
}
