package com.xhkjedu.slive.mapper.liveplay;

import com.xhkjedu.base.TkMapper;
import com.xhkjedu.slive.model.liveplay.LCourse;
import com.xhkjedu.slive.model.xz.LXzKj;
import com.xhkjedu.slive.vo.liveplay.*;
import com.xhkjedu.slive.vo.xz.XzDateKjTeaVo;
import org.apache.ibatis.annotations.Param;

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

public interface CourseMapper extends TkMapper<LCourse> {
    //更新已报学生数量
    void updateStuNum(@Param("courseid") Integer courseid);

    //课程列表
    List<CourseVo> listAll(@Param("course") LCourse course);

    //课程详情
    CourseVo findById(@Param("course") LCourse course);

    //获取进行中的课节id
    Integer findOnSection(Integer courseid);

    //获取学生课程列表
    List<CourseVo> listStu(@Param("course") LCourse course);

    //修改课程状态
    void updateState(@Param("course") LCourse course);

    //修改课节数量
    void updateCourseNum(Integer courseid);

    void updateCourseDeleted(Integer courseid,Integer deleted);

    //获取课程学生集合
    List<Map> listUid(@Param("classids") List<Integer> classids);

    //获取学生选课信息
    String findBySchoolIdCourseIdStudentId(@Param("schoolid") Integer schoolid, @Param("courseid") Integer courseid, @Param("studentid") Integer studentid);

    //分类下课程
    List<CourseVo> listAllForStu(@Param("course")LCourse course);

    //课程分类列表
    List<CTypeVo> listType(@Param("course")LCourse course);

    //课程列表
    List<CourseVo> listAllForStu2(@Param("course")LCourse course);

    //指定月份课程日期数量
    List<SectionDateVo> listSectionDateForStu(@Param("cp") CourseParams cp);

    //指定日期的课节列表
    List<CourseSectionVo> listSectionsByDate(@Param("cp")CourseParams cp);

    //教师指定月份课程日期数量
    List<SectionDateVo> listSectionDateForTeacher(@Param("course") CourseParams course);
    //巡课指定月份课程日期数量
    List<Map> listSectionDateForXk2(@Param("course") CourseParams course);

    LCourse getCourseByIdAndDeleted(Integer courseid,Integer deleted);

    //课节未结束的课程列表
    List<LCourse> listCourse(Integer schoolid);

    //今天以后行政和提高班的课程列表
    List<LCourse> listCourse2(@Param("classids") String classids);

    //学生所有的直播课
    List<LCourse> listCourse3(@Param("studentid") Integer studentid);

    //学生指定班级直播课
    List<LCourse> listCourse4(@Param("studentid") Integer studentid, @Param("classid") Integer classid);

    //删除直播课指定班级下的所有学生和班级
    void delClass(@Param("classids") String classids, @Param("classid") Integer classid, @Param("courseid") Integer courseid);

    //删除直播课指定班级下的所有学生
    void delClass2(@Param("classids") String classids, @Param("classid") Integer classid, @Param("courseid") Integer courseid);

    List<LCourse> listXzCourse(Integer classid);

    //获取需要处理的直播课
    List<CourseStudentVo> listNeedHandleCourse(@Param("course") CourseParams params);

    //获取要删除的班级学生ids
    String getCsids(Integer classid, String classids);

    //删除直播学生
    void delStuByCsids(@Param("csids") String csids);

    //添加直播学生
    void addCourseStu(Integer classid, Integer createid, Integer createtime, Integer schoolid, String classids);

    //修改课程课节名称
    void updateCoursename(@Param("course") LCourse course);

    //修改课程课节备注
    void updateCoursecomm(@Param("course") LCourse course);

    //根据课程id删除关联课程关联信息
    void deleteCourseClassByCourseid(@Param("courseid") Integer courseid);

    //获取指定课节班级日期下的课程信息
    CourseVo getCourseByKjidAndClassid(@Param("kjid") Integer kjid, @Param("classid") Integer classid, @Param("seldate") String seldate);

    //获取指定指定日期教师课节下教师的直播课
    CourseVo getCourseByDateKjTeacher(@Param("kjTeaVo") XzDateKjTeaVo kjTeaVo);

    //修改未开课课程课节时间-
    void updateBatchCourseSectionTime(@Param("list") List<LXzKj> list);

    //批量删除课程
    void batchDelCourse(@Param("courseids") List<Integer> courseids);

    //批量更改课程学生数量
    void updateStuNumBatch(@Param("courseids") String courseids);

    //获取直播类型、班级、年级
    CourseVo getTypeClassGradeById(@Param("courseid") Integer courseid);
}
