using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Dto.CheckIn;
using QYZH.InteractiveMagazine.Models.Dto.Compensation;
using QYZH.InteractiveMagazine.Models.Dto.Points;
using QYZH.InteractiveMagazine.Models.Entity;

namespace QYZH.InteractiveMagazine.IService;

public interface IUsersService : IBaseService<Users>
{
    /// <summary>
    /// 分页查询用户列表
    /// </summary>
    Task<BaseResponse<PageListModel<UsersOutput>>> GetListAsync(UsersQueryInput input);

    /// <summary>
    /// 获取用户详情（仅基本信息）
    /// </summary>
    Task<BaseResponse<UserDetailOutput>> GetDetailAsync(long id);

    /// <summary>
    /// 更新用户状态
    /// </summary>
    Task<BaseResponse> UpdateStatusAsync(long id);

    /// <summary>
    /// 手动增加用户积分
    /// </summary>
    Task<ManualPointsOutput> ManualAddPointsAsync(long userId, ManualAddPointsInput input, long operatorId, string operatorName, string? ipAddress = null);

    /// <summary>
    /// 手动扣除用户积分
    /// </summary>
    Task<ManualPointsOutput> ManualDeductPointsAsync(long userId, ManualDeductPointsInput input, long operatorId, string operatorName, string? ipAddress = null);

    /// <summary>
    /// 分页查询用户积分记录
    /// </summary>
    Task<BaseResponse<PageListModel<PointsRecordOutput>>> GetUserPointsRecordsAsync(long userId, PointsRecordQueryInput input);

    /// <summary>
    /// 分页查询用户签到记录
    /// </summary>
    Task<BaseResponse<PageListModel<CheckInRecordOutput>>> GetUserCheckInRecordsAsync(long userId, PageQueryModel input);

    /// <summary>
    /// 分页查询用户补偿任务
    /// </summary>
    Task<BaseResponse<PageListModel<CompensationTaskOutput>>> GetUserCompensationTasksAsync(long userId, CompensationTaskQueryInput input);

    /// <summary>
    /// 分页查询用户期刊列表（含期刊详情）
    /// </summary>
    Task<BaseResponse<PageListModel<UserJournalItemOutput>>> GetUserJournalsAsync(long userId, UserJournalQueryInput input);
}
