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

import com.ym.mec.biz.dal.dto.CourseGroupExtendDto;
import com.ym.mec.biz.dal.entity.CoursesGroup;
import com.ym.mec.biz.dal.enums.GroupStatusEnum;
import com.ym.mec.common.dal.BaseDAO;
import org.apache.ibatis.annotations.Param;

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

public interface CoursesGroupDao extends BaseDAO<Long, CoursesGroup> {

    /**
     * @describe 获取指定教师的课程组列表
     * @author Joburgess
     * @date 2020/3/8
     * @param params: 教师编号
     * @return java.util.List<com.ym.mec.biz.dal.entity.CoursesGroup>
     */
    List<CoursesGroup> findTeacherCourseGroups(Map<String, Object> params);
    int countTeacherGroups(Map<String,Object> params);


    List<CourseGroupExtendDto> findTeacherCourseGroupsWithWeb(Map<String, Object> params);
    int countTeacherGroupsWithWeb(Map<String,Object> params);

    List<CourseGroupExtendDto> findStudentCourseGroupsWithWeb(Map<String, Object> params);
    int countStudentGroupsWithWeb(Map<String,Object> params);

    /**
     * @describe 获取指定教师的课程组列表
     * @author Joburgess
     * @date 2020/3/8
     * @return java.util.List<com.ym.mec.biz.dal.entity.CoursesGroup>
     */
    List<CoursesGroup> queryTeacherCourseGroups(Map<String, Object> params);

    /**
     * COUNT指定教师的课程组列表
     * @param params
     * @return
     */
    int countTeacherCourseGroups(Map<String, Object> params);

    /**
     * 获取冻结的课时
     * @param groupIds
     * @return
     */
    List<Map<Long, Long>> findFreezeMinutes(@Param("groupIds") List<Long> groupIds);

    /**
     * 获取已消耗的课时数
     * @param groupIds
     * @return
     */
    List<Map<Long, Long>> findConsumeMinutes(@Param("groupIds") List<Long> groupIds);

    /**
     * @describe 根据开课时间获取无学生加入的课程组
     * @author Joburgess
     * @date 2020/3/17
     * @param startDate: 开始时间
     * @return java.util.List<com.ym.mec.biz.dal.entity.CoursesGroup>
     */
    List<CoursesGroup> findNoStudentsGroups(@Param("startDate")Date startDate);

    /**
     * @describe 获取无课时的课程组
     * @author Joburgess
     * @date 2020/3/18
     * @param :
     * @return java.util.List<com.ym.mec.biz.dal.entity.CoursesGroup>
     */
    List<CoursesGroup> findNoCoursesGroups();

    CoursesGroup lockGroup(@Param("groupId") Long groupId);

    /**
     * @describe 更新课程组状态
     * @author Joburgess
     * @date 2020/3/18
     * @param groupIds:
     * @param status:
     * @return int
     */
    int updateGroupStatus(@Param("groupIds") List<Long> groupIds,
                          @Param("status")GroupStatusEnum status);
}
