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

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

/// <summary>
/// 生产班次服务接口
/// </summary>
public interface IShiftService
{
    Task<ShiftGetOutput> GetAsync(long id);

    Task<PageOutput<ShiftGetPageOutput>> GetPageAsync(PageInput<ShiftGetPageInput> input);

    Task<long> AddAsync(ShiftAddInput input);

    Task UpdateAsync(ShiftUpdateInput input);

    Task DeleteAsync(long id);

    Task SoftDeleteAsync(long id);

    Task BatchSoftDeleteAsync(long[] ids);

    /// <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);

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

    /// <summary>
    /// 获取班次相关的规则列表
    /// </summary>
    /// <param name="shiftId">班次ID</param>
    /// <returns>班次规则列表</returns>
    Task<List<ShiftRuleEntity>> GetShiftRulesAsync(long shiftId);
} 