package repositories

import (
	"github.com/pahmiudahgede/senggoldong/model"
	"gorm.io/gorm"
)

type UserPinRepository interface {
	FindByUserID(userID string) (*model.UserPin, error)
	FindByPin(userPin string) (*model.UserPin, error)
	Create(userPin *model.UserPin) error
	Update(userPin *model.UserPin) error
}

type userPinRepository struct {
	DB *gorm.DB
}

func NewUserPinRepository(db *gorm.DB) UserPinRepository {
	return &userPinRepository{DB: db}
}

func (r *userPinRepository) FindByUserID(userID string) (*model.UserPin, error) {
	var userPin model.UserPin
	err := r.DB.Where("user_id = ?", userID).First(&userPin).Error
	if err != nil {
		return nil, err
	}
	return &userPin, nil
}

func (r *userPinRepository) FindByPin(pin string) (*model.UserPin, error) {
	var userPin model.UserPin
	err := r.DB.Where("pin = ?", pin).First(&userPin).Error
	if err != nil {
		return nil, err
	}
	return &userPin, nil
}

func (r *userPinRepository) Create(userPin *model.UserPin) error {
	err := r.DB.Create(userPin).Error
	if err != nil {
		return err
	}
	return nil
}

func (r *userPinRepository) Update(userPin *model.UserPin) error {
	err := r.DB.Save(userPin).Error
	if err != nil {
		return err
	}
	return nil
}