using HoneyBox.Admin.Business.Models;
using HoneyBox.Admin.Business.Models.Rank;

namespace HoneyBox.Admin.Business.Services.Interfaces;

/// <summary>
/// 排行榜管理服务接口
/// </summary>
public interface IRankService
{
    #region 周榜奖品管理

    /// <summary>
    /// 获取周榜奖品列表
    /// </summary>
    /// <param name="request">查询请求</param>
    /// <returns>分页奖品列表</returns>
    Task<PagedResult<RankPrizeResponse>> GetWeekPrizesAsync(RankPrizeListRequest request);

    /// <summary>
    /// 获取周榜奖品详情
    /// </summary>
    /// <param name="id">奖品ID</param>
    /// <returns>奖品详情</returns>
    Task<RankPrizeResponse?> GetWeekPrizeByIdAsync(int id);

    /// <summary>
    /// 创建周榜奖品
    /// </summary>
    /// <param name="request">创建请求</param>
    /// <returns>新奖品ID</returns>
    Task<int> CreateWeekPrizeAsync(RankPrizeCreateRequest request);

    /// <summary>
    /// 更新周榜奖品
    /// </summary>
    /// <param name="id">奖品ID</param>
    /// <param name="request">更新请求</param>
    /// <returns>是否成功</returns>
    Task<bool> UpdateWeekPrizeAsync(int id, RankPrizeUpdateRequest request);

    /// <summary>
    /// 删除周榜奖品
    /// </summary>
    /// <param name="id">奖品ID</param>
    /// <returns>是否成功</returns>
    Task<bool> DeleteWeekPrizeAsync(int id);

    /// <summary>
    /// 获取周榜中奖记录列表
    /// </summary>
    /// <param name="request">查询请求</param>
    /// <returns>分页中奖记录列表</returns>
    Task<PagedResult<RankLogResponse>> GetWeekLogsAsync(RankLogListRequest request);

    #endregion

    #region 月榜奖品管理

    /// <summary>
    /// 获取月榜奖品列表
    /// </summary>
    /// <param name="request">查询请求</param>
    /// <returns>分页奖品列表</returns>
    Task<PagedResult<RankPrizeResponse>> GetMonthPrizesAsync(RankPrizeListRequest request);

    /// <summary>
    /// 获取月榜奖品详情
    /// </summary>
    /// <param name="id">奖品ID</param>
    /// <returns>奖品详情</returns>
    Task<RankPrizeResponse?> GetMonthPrizeByIdAsync(int id);

    /// <summary>
    /// 创建月榜奖品
    /// </summary>
    /// <param name="request">创建请求</param>
    /// <returns>新奖品ID</returns>
    Task<int> CreateMonthPrizeAsync(RankPrizeCreateRequest request);

    /// <summary>
    /// 更新月榜奖品
    /// </summary>
    /// <param name="id">奖品ID</param>
    /// <param name="request">更新请求</param>
    /// <returns>是否成功</returns>
    Task<bool> UpdateMonthPrizeAsync(int id, RankPrizeUpdateRequest request);

    /// <summary>
    /// 删除月榜奖品
    /// </summary>
    /// <param name="id">奖品ID</param>
    /// <returns>是否成功</returns>
    Task<bool> DeleteMonthPrizeAsync(int id);

    /// <summary>
    /// 获取月榜中奖记录列表
    /// </summary>
    /// <param name="request">查询请求</param>
    /// <returns>分页中奖记录列表</returns>
    Task<PagedResult<RankLogResponse>> GetMonthLogsAsync(RankLogListRequest request);

    #endregion

    #region 用户排行榜

    /// <summary>
    /// 获取用户排行榜
    /// </summary>
    /// <param name="request">查询请求</param>
    /// <returns>分页用户排行榜</returns>
    Task<PagedResult<UserRankResponse>> GetUserRankAsync(UserRankListRequest request);

    #endregion

    #region 奖品类型

    /// <summary>
    /// 获取奖品类型列表
    /// </summary>
    /// <returns>奖品类型列表</returns>
    Task<List<PrizeTypeResponse>> GetPrizeTypesAsync();

    #endregion
}
