package service

import (
	"gitea.qpismont.fr/qpismont/trepa/internal/accounts/domain"
	"gitea.qpismont.fr/qpismont/trepa/internal/core"
)

type Service struct {
	repository domain.AccountRepository
}

func NewService(repository domain.AccountRepository) domain.AccountService {
	return &Service{repository: repository}
}

func (s *Service) Login(login domain.AccountLogin) (*domain.Account, *core.HTTPError) {
	account, err := s.repository.FetchOneByUsername(login.Username)
	if err != nil {
		return nil, domain.ErrAccountNotFound
	}

	ok, err := core.ComparePassword(login.Password, account.Password)
	if err != nil {
		return nil, domain.ErrBadPassword
	}

	if !ok {
		return nil, domain.ErrBadPassword
	}

	return account, nil
}