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

import com.ym.mec.biz.dal.dto.*;
import com.ym.mec.biz.dal.entity.ClassGroup;
import com.ym.mec.common.dal.BaseDAO;

import com.ym.mec.common.entity.ImGroupModel;
import com.ym.mec.common.entity.ImUserModel;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {


    /**
     * 查询老师乐团课课程
     *
     * @param teacherId
     * @return
     */
    List<ClassGroup> findClassGroup4Teacher(@Param("teacherId") Integer teacherId);

    /**
     * 获取所有合奏班
     *
     * @return
     */
    List<ClassGroup> findAllMixClassGroup(@Param("musicGroupId") String musicGroupId);

    /**
     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroup>
     * @Author: Joburgess
     * @Date: 2019/10/8
     * @params [musicGroupId]
     * @describe 获取所有班级
     */
    List<ClassGroup> findAllClassGroupByMusicGroup(@Param("musicGroupId") String musicGroupId);

    /**
     * 根据合奏班ID查询该合奏班下的子班级
     *
     * @param mixClassGroupId
     * @return
     */
    List<ClassGroup> findMixClassChildClassGroup(@Param("mixClassGroupId") Integer mixClassGroupId);

    /**
     * 根据乐团编号查询单技班级信息
     *
     * @param musicGroupId
     * @return
     */
    List<ClassGroup> findAllNormalClassGroupByMusicGroupId(@Param("musicGroupId") String musicGroupId);

    /**
     * 查询合奏班包含子班的名字信息
     *
     * @param classGroupId
     * @return
     */
    ClassGroup findMixClassChildClassGroupNames(@Param("classGroupId") int classGroupId);

    /**
     * 跟班级ids查询班级信息
     *
     * @param ids
     * @return
     */
    List<ClassGroup> findClassGroupByIds(@Param("ids") String ids);

    /**
     * 根据教师编号获取教师所在乐团，带了哪些班级
     *
     * @param userId
     * @return
     */
    List<TeacherMusicClassInfoDto> queryGroupCourses(Integer userId);

    /**
     * 获取老师VIP课程信息列表
     *
     * @param params
     * @return
     */
    List<TeacherVipClassInfoDto> getTeacherVipClass(Map<String, Object> params);

    /**
     * count老师VIP课程信息列表
     *
     * @param params
     * @return
     */
    int countTeacherVipClass(Map<String, Object> params);

    /**
     * 获取乐团所有班级列表
     *
     * @param musicGroupId
     * @return
     */
    List<ClassGroupTeachersDto> findClassGroupByMusicGroupId(@Param("musicGroupId") String musicGroupId, @Param("type") String type);

    /**
     * 获取学生所购买课程列表
     *
     * @param params
     * @return
     */
    List<CourseListDto> queryCoursePage(Map<String, Object> params);

    /**
     * 获取学员所在群组信息
     *
     * @param userId
     * @param search
     * @return
     */
    List<ImGroupModel> queryUserGroups(@Param("userId") Integer userId, @Param("search") String search);

    /**
     * 获取vip课的学生名称列表
     *
     * @param musicGroupId
     * @return
     */
    List<String> findVipStuNames(String musicGroupId);

    /**
     * 获取课程下的学员列表
     *
     * @param musicGroupId
     * @return
     */
    List<ImUserModel> findGroupUsers(String musicGroupId);

    /**
     * count学员购买列表
     *
     * @param params
     * @return
     */
    int countStudentPayLog(Map<String, Object> params);

    /**
     * 分页查询学员购买列表
     *
     * @param params
     * @return
     */
    List<StudentPayInfoDto> queryStudentPayLog(Map<String, Object> params);

    /**
     * COUNT学员购买列表
     *
     * @param params
     * @return
     */
    int countCoursePage(Map<String, Object> params);

    /**
     * @return int
     * @Author: Joburgess
     * @Date: 2019/10/3
     * @params [classGroupId]
     * @describe 统计班级人数
     */
    int countClassStudent(Long classGroupId);

    /**
     * 班级增加学生人数
     *
     * @param classGroup
     * @return
     */
    int addStudentNum(@Param("classGroup") ClassGroup classGroup);

    /**
     * 获取当前班级老师id列表
     *
     * @param id
     * @return
     */
    Set<Integer> queryTeacherIds(String id);

    /**
     * 获取当前班级老师数量
     *
     * @param classGroupId
     * @return
     */
    Integer countTeacherNum(String classGroupId);

    /**
     * 获取老师所在班级群组列表
     *
     * @param userId
     * @param search
     * @return
     */
    List<ImGroupModel> queryTeacherGroups(@Param("userId") Integer userId, @Param("search") String search);

    /**
     * 获取未分配合奏的单技班列表
     *
     * @param musicGroupId
     * @return
     */
    List<ClassGroup> findNoClassSubjects(String musicGroupId);

    /**
     * @Author: Joburgess
     * @Date: 2019/10/16
     * @params [vipGroupId]
     * @return com.ym.mec.biz.dal.entity.ClassGroup
     * @describe 根据小课获取关联的班级信息
     */
    ClassGroup findByVipGroup(Long vipGroupId);

    /**
     * @Author: Joburgess
     * @Date: 2019/10/16
     * @params [classGroupId]
     * @return com.ym.mec.biz.dal.entity.ClassGroup
     * @describe 锁定班级信息
     */
    ClassGroup lockClassGroup(Long classGroupId);

    /**
     * 获取当前班级列表老师数量
     * @param classGroupIds
     * @return
     */
    List<Map<Integer, Integer>> countTeacherNums(@Param("classGroupIds") String classGroupIds);

    /**
     * @Author: Joburgess
     * @Date: 2019/10/17
     * @params [teacherId]
     * @return java.util.List<com.ym.mec.biz.dal.dto.TeacherClassGroupDto>
     * @describe 获取老师乐团班级
     */
    List<TeacherClassGroupDto> findTeacherMusicClassGroup(@Param("teacherId") Long teacherId);

    /**
     * 根据老师编号列表获取小课数量
     * @param teacherIds
     * @return
     */
    List<Map<Integer, Long>> countTeacherVipNum(String teacherIds);

}