package com.lesingle.creation.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lesingle.creation.dto.user.CreateUserDTO;
import com.lesingle.creation.dto.user.UpdateUserDTO;
import com.lesingle.creation.dto.user.UserQueryDTO;
import com.lesingle.creation.entity.User;
import com.lesingle.creation.vo.user.UserDetailVO;
import com.lesingle.creation.vo.user.UserListVO;
import com.lesingle.creation.vo.user.UserStatsVO;

/**
 * 用户服务接口
 */
public interface UserService extends IService<User> {

    /**
     * 创建用户
     *
     * @param dto 创建用户 DTO
     * @param tenantId 租户 ID
     * @param operatorId 操作人 ID
     * @return 用户详情 VO
     */
    UserDetailVO create(CreateUserDTO dto, Long tenantId, Long operatorId);

    /**
     * 分页查询用户列表
     *
     * @param queryDTO 查询参数
     * @param tenantId 当前租户 ID
     * @param isSuperTenant 是否超级租户
     * @return 用户列表分页数据
     */
    Page<UserListVO> pageList(UserQueryDTO queryDTO, Long tenantId, boolean isSuperTenant);

    /**
     * 根据 ID 查询用户详情
     *
     * @param id 用户 ID
     * @param tenantId 当前租户 ID
     * @param isSuperTenant 是否超级租户
     * @return 用户详情 VO
     */
    UserDetailVO detail(Long id, Long tenantId, boolean isSuperTenant);

    /**
     * 更新用户状态
     *
     * @param id 用户 ID
     * @param status 状态
     * @param operatorId 操作人 ID
     * @return 用户详情 VO
     */
    UserDetailVO updateStatus(Long id, String status, Long operatorId);

    /**
     * 更新用户
     *
     * @param id 用户 ID
     * @param dto 更新用户 DTO
     * @param tenantId 租户 ID
     * @return 用户详情 VO
     */
    UserDetailVO update(Long id, UpdateUserDTO dto, Long tenantId);

    /**
     * 删除用户
     *
     * @param id 用户 ID
     * @param tenantId 租户 ID
     */
    void delete(Long id, Long tenantId);

    /**
     * 用户统计（仅超管）
     *
     * @return 用户统计 VO
     */
    UserStatsVO getStats();
}
