using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using ZhonTai.Admin.Core.Dto;
using NPP.SmartSchedue.Api.Contracts.Services.Time.Input;
using NPP.SmartSchedue.Api.Contracts.Services.Time.Output;

namespace NPP.SmartSchedue.Api.Contracts.Services.Time;

/// <summary>
/// 班次规则服务接口
/// </summary>
public interface IShiftRuleService
{
    /// <summary>
    /// 根据ID获取班次规则详细信息
    /// </summary>
    /// <param name="id">规则ID</param>
    /// <returns>班次规则详细信息</returns>
    Task<ShiftRuleGetOutput> GetAsync(long id);

    /// <summary>
    /// 返回班次列表数据
    /// </summary>
    /// <returns></returns>
    Task<List<ShiftRuleGetPageOutput>> GetListAsync();
    
    /// <summary>
    /// 获取班次规则分页列表
    /// </summary>
    /// <param name="input">查询条件</param>
    /// <returns>分页结果</returns>
    Task<PageOutput<ShiftRuleGetPageOutput>> GetPageAsync(PageInput<ShiftRuleGetPageInput> input);

    /// <summary>
    /// 添加班次规则
    /// </summary>
    /// <param name="input">添加输入参数</param>
    /// <returns>新创建的规则ID</returns>
    Task<long> AddAsync(ShiftRuleAddInput input);

    /// <summary>
    /// 更新班次规则
    /// </summary>
    /// <param name="input">更新输入参数</param>
    /// <returns></returns>
    Task UpdateAsync(ShiftRuleUpdateInput input);

    /// <summary>
    /// 删除班次规则
    /// </summary>
    /// <param name="id">规则ID</param>
    /// <returns></returns>
    Task DeleteAsync(long id);

    /// <summary>
    /// 软删除班次规则
    /// </summary>
    /// <param name="id">规则ID</param>
    /// <returns></returns>
    Task SoftDeleteAsync(long id);

    /// <summary>
    /// 批量软删除班次规则
    /// </summary>
    /// <param name="ids">规则ID数组</param>
    /// <returns></returns>
    Task BatchSoftDeleteAsync(long[] ids);

    /// <summary>
    /// 切换班次规则启用状态
    /// </summary>
    /// <param name="id">规则ID</param>
    /// <param name="isEnabled">是否启用</param>
    /// <returns></returns>
    Task ToggleStatusAsync(long id, bool isEnabled);

    /// <summary>
    /// 启用班次规则
    /// </summary>
    /// <param name="id">规则ID</param>
    /// <returns></returns>
    Task EnableAsync(long id);

    /// <summary>
    /// 禁用班次规则
    /// </summary>
    /// <param name="id">规则ID</param>
    /// <returns></returns>
    Task DisableAsync(long id);
} 