package models

import (
	"fmt"

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

var ErrInvalidPassword = fmt.Errorf("invalid password")

type User struct {
	Username     string `json:"username"`
	PasswordHash []byte `json:"passwordHash"`
}

func (u *User) SetPassword(password string) error {
	newHash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
	if err != nil {
		return fmt.Errorf("error hashing new password: %w", err)
	}

	u.PasswordHash = newHash
	return nil
}

func (u *User) VerifyPassword(password string) error {
	err := bcrypt.CompareHashAndPassword([]byte(u.PasswordHash), []byte(password))
	if err != nil {
		return ErrInvalidPassword
	}
	return nil
}