using YBEE.EQM.Core;

namespace YBEE.EQM.Application;

/// <summary>
/// 学校班级信息管理服务
/// </summary>
public interface ISchoolClassService
{
    /// <summary>
    /// 添加学校班级
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task Add(AddSchoolClassInput input);
    /// <summary>
    /// 批量添加学校班级
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task BatchAdd(BatchAddSchoolClassInput input);
    /// <summary>
    /// 批量插入班级
    /// </summary>
    /// <param name="schoolClasses"></param>
    /// <returns></returns>
    Task BatchInsert(List<BatchInsertSchoolClassInput> schoolClasses);
    /// <summary>
    /// 获取批量导入班级ID
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<Dictionary<short, long>> GetImportSchoolClassList(ImportSchoolClassInput input);
    /// <summary>
    /// 获取班级信息
    /// </summary>
    /// <param name="sysOrgId"></param>
    /// <param name="sysOrgBranchId"></param>
    /// <param name="examGrade"></param>
    /// <param name="classNumber"></param>
    /// <returns></returns>
    Task<SchoolClassLiteOutput> GetSchoolClass(short sysOrgId, short? sysOrgBranchId, ExamGradeOutput examGrade, short classNumber);
    /// <summary>
    /// 获取班级ID
    /// </summary>
    /// <param name="educationStage">学段</param>
    /// <param name="sysOrgId">机构ID</param>
    /// <param name="gradeBeginYear">开始年份</param>
    /// <param name="classNumber">班号</param>
    /// <returns></returns>
    long GetSchoolClassId(EducationStage educationStage, short sysOrgId, short gradeBeginYear, short classNumber);
    /// <summary>
    /// 根据ID获取学校班级信息
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<SchoolClassOutput> GetById(long id);
    /// <summary>
    /// 根据级获取学校班级列表
    /// </summary>
    /// <param name="gradeBeginYear"></param>
    /// <returns></returns>
    Task<List<SchoolClassOutput>> GetListByGradeBeginYear(short gradeBeginYear);
    /// <summary>
    /// 分页查询班级列表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<PageResult<SchoolClassOutput>> QueryPageList(SchoolClassPageInput input);
}
