package service

import (
	"context"
	"fmt"

	"my-project/internal/dao"
	"my-project/internal/model/dto"
	"my-project/internal/model/entity"
	"my-project/pkg/log"
)

// UserService 用户业务服务
type UserService struct {
	userDAO *dao.UserDAO
}

// NewUserService 创建用户服务实例
// @param userDAO *dao.UserDAO - 用户数据访问对象
// @return *UserService - 服务实例
func NewUserService(userDAO *dao.UserDAO) *UserService {
	return &UserService{userDAO: userDAO}
}

// GetUserByID 根据用户ID获取用户信息
// @param ctx context.Context - 请求上下文
// @param userID int64 - 用户唯一ID
// @return *entity.User - 用户实体
// @return error - 查询错误
func (s *UserService) GetUserByID(ctx context.Context, userID int64) (*entity.User, error) {
	user, err := s.userDAO.FindByID(ctx, userID)
	if err != nil {
		return nil, fmt.Errorf("查询用户失败: %w", err)
	}
	return user, nil
}

// CreateUser 创建新用户
// @param ctx context.Context - 请求上下文
// @param req *dto.CreateUserRequest - 创建请求
// @return *entity.User - 创建的用户实体
// @return error - 创建错误
func (s *UserService) CreateUser(ctx context.Context, req *dto.CreateUserRequest) (*entity.User, error) {
	user := &entity.User{
		Username: req.Username,
		Email:    req.Email,
	}

	if err := s.userDAO.Create(ctx, user); err != nil {
		return nil, fmt.Errorf("创建用户失败: %w", err)
	}

	// 记录关键业务日志
	log.Info(ctx, "用户创建成功", map[string]interface{}{
		"userID":   user.ID,
		"username": user.Username,
	})

	return user, nil
}
