package useCases

import (
	"GoCMS/adapters/secondary/gateways"
	"GoCMS/domain/user"
	"gorm.io/gorm"
)

type CreateUserUseCase struct {
	userRepository gateways.UserRepository
}

type CreateUserCommand struct {
	Username         string
	Password         string
	Email            string
	VerificationCode string
}

func NewCreateUserUseCase(db *gorm.DB) *CreateUserUseCase {
	return &CreateUserUseCase{
		userRepository: *gateways.NewUserRepository(db),
	}
}

func (g *CreateUserUseCase) CreateUser(createUser CreateUserCommand) (user.User, error) {
	return g.userRepository.Create(user.FromApi(
		createUser.Username,
		createUser.Password,
		createUser.Email,
		createUser.VerificationCode,
	))
}
