using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using ZhonTai.Admin.Core.Repositories;
namespace NPP.SmartSchedue.Api.Contracts.Domain.Time;
///
/// 班次不可用标记仓储接口
/// 提供班次不可用数据的访问方法
///
public interface IShiftUnavailabilityRepository : IRepositoryBase
{
///
/// 获取指定员工在指定日期范围内的不可用记录
///
/// 员工ID
/// 开始日期
/// 结束日期
/// 不可用记录列表
Task> GetByPersonnelAndDateRangeAsync(long personnelId, DateTime startDate, DateTime endDate);
///
/// 获取指定日期和班次的不可用员工ID列表
///
/// 日期
/// 班次ID
/// 不可用员工ID列表
Task> GetUnavailablePersonnelIdsAsync(DateTime date, long shiftId);
///
/// 检查人员班次的意愿
///
///
///
///
///
Task CheckUnavailablePersonnelByShiftAsync(DateTime date, long shiftId, long personnelId);
///
/// 获取指定日期所有班次的不可用员工分布
///
/// 日期
/// 班次ID -> 不可用员工ID列表的字典
Task>> GetDailyUnavailablePersonnelAsync(DateTime date);
///
/// 批量获取日期范围内的不可用员工分布
///
/// 开始日期
/// 结束日期
/// 日期 -> (班次ID -> 不可用员工ID列表) 的嵌套字典
Task>>> GetRangeUnavailablePersonnelAsync(DateTime startDate, DateTime endDate);
///
/// 检查指定员工在指定日期和班次是否已有不可用记录
///
/// 员工ID
/// 日期
/// 班次ID
/// 是否存在记录
Task ExistsAsync(long personnelId, DateTime date, long shiftId);
///
/// 删除指定条件的记录
///
/// 员工ID
/// 日期
/// 班次ID(可选)
/// 删除的记录数量
Task DeleteByConditionAsync(long personnelId, DateTime date, long? shiftId = null);
///
/// 获取统计信息
///
/// 员工ID
/// 开始日期
/// 结束日期
/// 统计结果
Task> GetStatisticsAsync(long personnelId, DateTime startDate, DateTime endDate);
}