package com.ym.mec.biz.dal.dao;

import com.ym.mec.biz.dal.dto.CourseScheduleDto;
import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
import com.ym.mec.biz.dal.entity.CourseSchedule;
import com.ym.mec.common.dal.BaseDAO;

import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {

    /**
     * 根据教师ID获取当前课程信息
     *
     * @param teacherID
     * @return
     */
    TeacherAttendanceDto getCurrentCourseDetail(@Param("courseID") Long courseID);

    int batchAddCourseSchedules(List<CourseSchedule> courseSchedules);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/17
     * 统计学生所属班级数量
     */
    Integer[] countStudentInClass(List<Integer> classGroupIDs);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/17
     * 根据日期获取当日排课信息
     */
    List<CourseScheduleDto> getCourseSchedulesWithDate(@Param("classDate") Date classDate);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/17
     * 根据乐团ID删除排课
     */
    int deleteCourseSchedulesByMusicGroupID(@Param("musicGroupID") Long musicGroupID);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/17
     * 根据月份获取乐团在该月有课的日期
     */
    List<Date> getCourseScheduleDateByMonth(@Param("musicGroupID") Long musicGroupID,
                                            @Param("month") Date month);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/23
     * 统计教师在一天内有时间重复的课数
     */
    int countTeacherCourseInOnDayRepeats(CourseSchedule courseSchedule);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/24
     * 根据日期获取对应老师的课程
     */
    List<CourseSchedule> findTeacherCoursesInDates(@Param("dates") List<Date> dates,
                                                   @Param("teacherId") Long teacherId);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/24
     * 根据日期获取课程
     */
    List<CourseSchedule> findCoursesByDates(@Param("dates") List<Date> dates);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/24
     * 获取在指定时间段内存在重复的课程
     */
    List<CourseSchedule> findOverLapCoursesInDay(@Param("dates") List<Date> dates,
                                                 @Param("startClassTime") Date startClassTime,
                                                 @Param("endClassTime") Date endClassTime);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/24
     * 根据id批量获取课程
     */
    List<CourseSchedule> findCourseSchedulesByIds(@Param("ids") Long[] ids);

    /**
     * 获取班级的课程计划
     *
     * @param classGroupList
     * @return
     */
    List<CourseSchedule> findClassGroupCourseSchedules(@Param("classGroupList") List classGroupList);
}