package service

import (
	"github.com/gin-gonic/gin"
	domain "github.com/haydenhargreaves/Potion/internal/domain/user"
)

// UserService implements the domain.UserService defined in the domain module.
type UserService struct {
	userRepository domain.UserRepository
}

// Compile-time check to ensure the UserService implements domain.UserService
var _ domain.UserService = (*UserService)(nil)

// NewUserService creates a user service object which can be passed into the context. The service
// requires a user repository which it will use to hit the database when needed.
func NewUserService(userRepository domain.UserRepository) domain.UserService {
	return &UserService{userRepository: userRepository}
}

func (s *UserService) GetAuthenicatedUser(ctx *gin.Context) domain.User {
	val, ok := ctx.Get("userId")
	if !ok {
		return domain.User{}
	}

	id := val.(int)
	user, err := s.userRepository.GetUserById(id)
	if err != nil {
		return domain.User{}
	}

	return *user
}
