package user_repository

import (
	"chonho/pkg/model"
	"gorm.io/gorm"
)

type UserRepository interface {
	First(filter UserFilter) (*model.User, error)
	Save(user *model.User) error
}

type repository struct {
	db *gorm.DB
}

func NewUserRepository(db *gorm.DB) *repository {
	return &repository{
		db: db,
	}
}

type UserFilter struct {
	Phone    string
	UserID   int64
	DeviceId string
	Status   int
}

func (r *repository) Save(user *model.User) error {
	return r.db.Save(user).Error
}

func (r *repository) First(filter UserFilter) (*model.User, error) {

	var user model.User
	builder := r.db.Model(&user)

	if filter.Phone != "" {
		builder = builder.Where("phone = ?", filter.Phone)
	}

	if filter.UserID != 0 {
		builder = builder.Where("id = ?", filter.UserID)
	}

	if filter.DeviceId != "" {
		builder = builder.Where("device_id = ?", filter.DeviceId)
	}

	if filter.Status != 0 {
		builder = builder.Where("status = ?", filter.Status)
	}

	err := builder.First(&user).Error
	if err != nil {
		return nil, err
	}
	return &user, nil
}
