using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Dto.CheckIn;
using QYZH.InteractiveMagazine.Models.Entity;

namespace QYZH.InteractiveMagazine.IService;

/// <summary>
/// 签到配置服务接口
/// </summary>
public interface ICheckInConfigService : IBaseService<CheckInConfig>
{
    /// <summary>
    /// 创建签到配置
    /// </summary>
    /// <param name="input">签到配置输入</param>
    /// <returns>创建的签到配置信息</returns>
    Task<CheckInConfigOutput> CreateAsync(CheckInConfigInput input);

    /// <summary>
    /// 更新签到配置
    /// </summary>
    /// <param name="id">签到配置ID</param>
    /// <param name="input">签到配置输入</param>
    /// <returns>更新后的签到配置信息</returns>
    Task<CheckInConfigOutput> UpdateAsync(long id, CheckInConfigInput input);

    /// <summary>
    /// 删除签到配置（软删除）
    /// </summary>
    /// <param name="id">签到配置ID</param>
    Task DeleteAsync(long id);

    /// <summary>
    /// 根据ID获取签到配置
    /// </summary>
    /// <param name="id">签到配置ID</param>
    /// <returns>签到配置信息</returns>
    Task<CheckInConfigOutput> GetByIdAsync(long id);

    /// <summary>
    /// 分页查询签到配置列表
    /// </summary>
    /// <param name="input">查询条件</param>
    /// <returns>分页结果</returns>
    Task<PageListModel<CheckInConfigOutput>> GetListAsync(CheckInConfigQueryInput input);

    /// <summary>
    /// 更新签到配置启用/禁用状态
    /// </summary>
    /// <param name="id">签到配置ID</param>
    Task<bool> UpdateStatusAsync(long id);
}
