using HoneyBox.Model.Models.Lottery;
using HoneyBox.Model.Models.Order;

namespace HoneyBox.Core.Interfaces;

/// <summary>
/// 抽奖服务接口
/// </summary>
public interface ILotteryService
{
    /// <summary>
    /// 获取一番赏抽奖结果
    /// </summary>
    /// <param name="userId">用户ID</param>
    /// <param name="orderNum">订单号</param>
    /// <returns>抽奖结果响应</returns>
    Task<PrizeOrderLogResponseDto> GetPrizeOrderLogAsync(int userId, string orderNum);

    /// <summary>
    /// 获取无限赏抽奖结果
    /// </summary>
    /// <param name="userId">用户ID</param>
    /// <param name="orderNum">订单号</param>
    /// <returns>抽奖结果响应</returns>
    Task<InfinitePrizeOrderLogResponseDto> GetInfinitePrizeOrderLogAsync(int userId, string orderNum);

    /// <summary>
    /// 获取无限赏中奖记录
    /// </summary>
    /// <param name="goodsId">商品ID</param>
    /// <param name="shangId">赏品等级ID（0表示全部）</param>
    /// <param name="isMibao">是否秘宝池（0=否，1=是）</param>
    /// <param name="page">页码</param>
    /// <param name="pageSize">每页数量</param>
    /// <returns>中奖记录响应</returns>
    Task<InfiniteShangLogResponseDto> GetInfiniteShangLogAsync(int goodsId, int shangId, int isMibao, int page, int pageSize);

    /// <summary>
    /// 获取用户抽奖记录（盒子抽奖记录）
    /// </summary>
    /// <param name="userId">用户ID</param>
    /// <param name="goodsId">商品ID</param>
    /// <param name="page">页码</param>
    /// <param name="pageSize">每页数量</param>
    /// <returns>抽奖记录响应</returns>
    Task<InfinitePrizeRecordsResponseDto> GetInfinitePrizeRecordsAsync(int userId, int goodsId, int page, int pageSize);

    /// <summary>
    /// 道具卡抽奖（重抽）
    /// </summary>
    /// <param name="userId">用户ID</param>
    /// <param name="goodsId">商品ID</param>
    /// <param name="orderListIds">要重抽的订单项ID列表</param>
    /// <returns>道具卡抽奖响应</returns>
    Task<ItemCardDrawResponseDto> DrawWithItemCardAsync(int userId, int goodsId, List<int> orderListIds);
}
