using HoneyBox.Admin.Business.Models;
using HoneyBox.Admin.Business.Models.QyLevel;

namespace HoneyBox.Admin.Business.Services.Interfaces;

/// <summary>
/// 权益等级管理服务接口
/// </summary>
public interface IQyLevelService
{
    #region 权益等级操作

    /// <summary>
    /// 获取权益等级列表（分页）
    /// </summary>
    /// <param name="request">分页请求</param>
    /// <returns>分页结果</returns>
    Task<PagedResult<QyLevelResponse>> GetQyLevelsAsync(QyLevelListRequest request);

    /// <summary>
    /// 获取权益等级详情
    /// </summary>
    /// <param name="id">权益等级ID</param>
    /// <returns>权益等级详情</returns>
    Task<QyLevelResponse?> GetQyLevelByIdAsync(int id);

    /// <summary>
    /// 更新权益等级
    /// </summary>
    /// <param name="id">权益等级ID</param>
    /// <param name="request">更新请求</param>
    /// <returns>是否成功</returns>
    Task<bool> UpdateQyLevelAsync(int id, QyLevelUpdateRequest request);

    /// <summary>
    /// 创建权益等级
    /// </summary>
    /// <param name="request">创建请求</param>
    /// <returns>新创建的权益等级ID</returns>
    Task<int> CreateQyLevelAsync(QyLevelCreateRequest request);

    /// <summary>
    /// 删除权益等级（软删除）
    /// </summary>
    /// <param name="id">权益等级ID</param>
    /// <returns>是否成功</returns>
    Task<bool> DeleteQyLevelAsync(int id);

    #endregion

    #region 权益等级奖品操作

    /// <summary>
    /// 获取权益等级奖品列表（分页）
    /// </summary>
    /// <param name="qyLevelId">权益等级ID</param>
    /// <param name="request">分页请求</param>
    /// <returns>分页结果</returns>
    Task<PagedResult<QyLevelPrizeResponse>> GetQyLevelPrizesAsync(int qyLevelId, QyLevelPrizeListRequest request);

    /// <summary>
    /// 获取权益等级奖品详情
    /// </summary>
    /// <param name="prizeId">奖品ID</param>
    /// <returns>奖品详情</returns>
    Task<QyLevelPrizeResponse?> GetQyLevelPrizeByIdAsync(int prizeId);

    /// <summary>
    /// 创建权益等级奖品
    /// </summary>
    /// <param name="qyLevelId">权益等级ID</param>
    /// <param name="request">创建请求</param>
    /// <returns>新创建的奖品ID</returns>
    Task<int> CreateQyLevelPrizeAsync(int qyLevelId, QyLevelPrizeCreateRequest request);

    /// <summary>
    /// 更新权益等级奖品
    /// </summary>
    /// <param name="prizeId">奖品ID</param>
    /// <param name="request">更新请求</param>
    /// <returns>是否成功</returns>
    Task<bool> UpdateQyLevelPrizeAsync(int prizeId, QyLevelPrizeUpdateRequest request);

    /// <summary>
    /// 删除权益等级奖品（软删除）
    /// </summary>
    /// <param name="prizeId">奖品ID</param>
    /// <returns>是否成功</returns>
    Task<bool> DeleteQyLevelPrizeAsync(int prizeId);

    #endregion
}
