using YBEE.EQM.Core;

namespace YBEE.EQM.Application;

/// <summary>
/// 监测特殊学生上报管理服务
/// </summary>
public interface IExamSpecialStudentService
{
    #region 批量导入
    /// <summary>
    /// 上传监测特殊学生批量导入文件
    /// </summary>
    /// <param name="filePath"></param>
    /// <param name="examPlanId"></param>
    /// <returns></returns>
    Task<UploadExamDataOutput<UploadExamSpecialStudentOutput>> Upload(string filePath, int examPlanId);
    /// <summary>
    /// 批量导入监测特殊学生
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<int> Import(ImportExamSpecialStudentInput input);
    #endregion
    #region 创建编辑
    /// <summary>
    /// 添加监测特殊学生
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task Add(AddExamSpecialStudentInput input);
    /// <summary>
    /// 更新监测特殊学生
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task Update(UpdateExamSpecialStudentInput input);
    /// <summary>
    /// 添加特殊学生佐证材料
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task AddAttachment(AddAttachmentInput input);
    /// <summary>
    /// 删除特殊学生佐证材料
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task DelAttachment(DeleteAttachmentInput input);
    /// <summary>
    /// 验证特殊学生佐证材料
    /// </summary>
    /// <param name="examPlanId"></param>
    /// <returns></returns>
    Task<bool> VerifyAttachment(int examPlanId);
    /// <summary>
    /// 删除监测特殊学生
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task Del(BaseId input);
    /// <summary>
    /// 清空监测特殊学生
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task Clear(ClearExamSpecialStudentInput input);
    /// <summary>
    /// 导出监测特殊学生上报打印表格
    /// </summary>
    /// <param name="examPlanId"></param>
    /// <returns></returns>
    Task<byte[]> ExportPrintTable(int examPlanId);
    #endregion

    #region 查询统计
    /// <summary>
    /// 分页查询监测特殊学生列表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<PageResult<ExamSpecialStudentOutput>> QueryPageList(ExamSpecialStudentPageInput input);
    /// <summary>
    /// 获取机构班级特殊学生上报人数统计列表
    /// </summary>
    /// <param name="examPlanId"></param>
    /// <param name="sysOrgId"></param>
    /// <returns></returns>
    Task<ExamSpecialStudentCountOutput> GetOrgGradeClassStudentCount(int examPlanId, short? sysOrgId = null);
    /// <summary>
    /// 获取状态数量
    /// </summary>
    /// <returns></returns>
    Task<List<StatusCount>> QueryStatusCount(ExamSpecialStudentPageInput input);
    #endregion

    Task RefreshFileSize();
}
