using Microsoft.AspNetCore.Mvc;
using QYZH.InteractiveMagazine.IService;
using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Dto.Mall;

namespace QYZH.InteractiveMagazine.WebApi.Controllers.WeChat;

/// <summary>
/// 小程序商城控制器
/// </summary>
public class MallController(IWxMallService mallService, ILogger<MallController> logger) : WeChatBaseController
{
    /// <summary>
    /// 获取商城商品列表
    /// </summary>
    /// <param name="type">商品类型筛选（可选）: MakeUpCard, PetBg</param>
    [HttpGet("products")]
    public async Task<BaseResponse<List<WxProductOutput>>> GetProducts([FromQuery] string? type = null)
    {
        var userId = GetCurrentUserId();
        if (userId == 0) return Fail("未获取到用户信息") as dynamic;

        var products = await mallService.GetProductsAsync(userId, type);
        return Success(products);
    }

    /// <summary>
    /// 获取商品详情
    /// </summary>
    /// <param name="id">商品Id</param>
    [HttpGet("product/{id}")]
    public async Task<BaseResponse<WxProductOutput>> GetProductDetail(long id)
    {
        var userId = GetCurrentUserId();
        if (userId == 0) return Fail("未获取到用户信息") as dynamic;

        var product = await mallService.GetProductDetailAsync(userId, id);
        if (product == null)
            return BaseResponse<WxProductOutput>.Fail(ResultCode.DENY, "商品不存在或已下架");

        return Success(product);
    }

    /// <summary>
    /// 积分兑换商品
    /// </summary>
    [HttpPost("exchange")]
    public async Task<BaseResponse<ExchangeOutput>> Exchange([FromBody] ExchangeInput input)
    {
        var userId = GetCurrentUserId();
        if (userId == 0) return Fail("未获取到用户信息") as dynamic;

        var result = await mallService.ExchangeAsync(userId, input);
        return Success(result);
    }

    /// <summary>
    /// 获取我的兑换记录
    /// </summary>
    /// <param name="limit">返回数量（默认20）</param>
    [HttpGet("exchangeRecords")]
    public async Task<BaseResponse<List<ExchangeRecordOutput>>> GetExchangeRecords([FromQuery] int limit = 20)
    {
        var userId = GetCurrentUserId();
        if (userId == 0) return Fail("未获取到用户信息") as dynamic;

        var records = await mallService.GetExchangeRecordsAsync(userId, limit);
        return Success(records);
    }
}
