using QYZH.InteractiveMagazine.Models.Dto.Bag;
using QYZH.InteractiveMagazine.Models.Dto.Mall;
using QYZH.InteractiveMagazine.Models.Entity;

namespace QYZH.InteractiveMagazine.IService;

/// <summary>
/// 小程序商城服务接口
/// </summary>
public interface IWxMallService : IBaseService<ExchangeRecord>
{
    /// <summary>
    /// 获取商城商品列表（仅上架 + 在售商品）
    /// </summary>
    /// <param name="userId">当前用户Id（用于判断是否已拥有）</param>
    /// <param name="type">按商品类型筛选（可选）</param>
    Task<List<WxProductOutput>> GetProductsAsync(long userId, string? type = null);

    /// <summary>
    /// 获取商品详情
    /// </summary>
    /// <param name="userId">当前用户Id</param>
    /// <param name="productId">商品Id</param>
    Task<WxProductOutput?> GetProductDetailAsync(long userId, long productId);

    /// <summary>
    /// 积分兑换商品
    /// </summary>
    /// <param name="userId">用户Id</param>
    /// <param name="input">兑换参数</param>
    Task<ExchangeOutput> ExchangeAsync(long userId, ExchangeInput input);

    /// <summary>
    /// 获取用户兑换记录
    /// </summary>
    /// <param name="userId">用户Id</param>
    /// <param name="limit">返回数量</param>
    Task<List<ExchangeRecordOutput>> GetExchangeRecordsAsync(long userId, int limit = 20);

    /// <summary>
    /// 获取用户背包物品列表
    /// </summary>
    /// <param name="userId">用户Id</param>
    /// <param name="itemType">按物品类型筛选（可选）</param>
    Task<List<UserBagOutput>> GetBagItemsAsync(long userId, string? itemType = null);

    /// <summary>
    /// 使用背包物品（补签卡等消耗品）
    /// </summary>
    /// <param name="userId">用户Id</param>
    /// <param name="input">使用参数</param>
    Task<UseItemOutput> UseItemAsync(long userId, UseItemInput input);

    /// <summary>
    /// 宠物换肤
    /// </summary>
    /// <param name="userId">用户Id</param>
    /// <param name="input">换肤参数</param>
    Task EquipSkinAsync(long userId, EquipSkinInput input);
}
