package com.yonge.cooleshow.biz.dal.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch;
import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupPlanVo;
import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentCourseVo;
import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentVo;
import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupVo;
import org.apache.ibatis.annotations.Param;

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

/**
 * 课程组表(CourseGroup)表数据库访问层
 *
 * @author hgw
 * @since 2022-03-18 15:29:10
 */
public interface CourseGroupDao extends BaseMapper<CourseGroup> {

    int insertBatch(@Param("entities") List<CourseGroup> entities);

    /**
     * 分页查询课程组信息
     */
    <T> IPage<T> queryTeacherCourseGroup(Page<T> page, @Param("param") Map<String, Object> param);

    /**
     * 平台方 老师详情直播课列表
     *
     * @param page  分页信息
     * @param query 查询条件
     * @return page
     */
    IPage<LiveCourseGroupVo> selectAdminLivePage(@Param("page") IPage<LiveCourseGroupVo> page, @Param(
            "param") LiveCourseGroupSearch query);

    /**
     * 获取课程组声部
     *
     * @param courseGroupIdList 课程组id集合
     * @return 声部信息
     */
    List<LiveCourseGroupVo> selectCourseGroupSubject(@Param("courseGroupIdList") List<Long> courseGroupIdList);

    /**
     * 直播课购买学生信息
     *
     * @param page  分页
     * @param query 查询条件
     * @return page
     */
    IPage<LiveCourseGroupStudentVo> selectAdminLiveStudentPage(@Param("page") IPage<LiveCourseGroupStudentVo> page, @Param("param") LiveCourseGroupStudentSearch query);

    /**
     * 直播课程详情 课程计划
     *
     * @param courseGroupId 课程组id
     * @return
     */
    List<LiveCourseGroupPlanVo> selectAdminLivePlan(@Param("courseGroupId") Long courseGroupId);

    /**
     * 课程组人数增加或减少
     *
     * @param id 课程组id
     */
    int opsPreStudentNum(@Param("id") Long id,@Param("num") Integer num);

    /**
     * 查询课程组详情
     *
     * @param courseGroupId 课程组id
     * @return
     */
    LiveCourseGroupVo selectAdminLiveCourseGroup(@Param("courseGroupId") Long courseGroupId);

    /**
     * 查询直播详情 直播课学生到课状态
     *
     * @param page  分页
     * @param query 查询条件
     * @return
     */
    IPage<LiveCourseGroupStudentCourseVo> selectAdminLiveStudentCoursePage(@Param("page") IPage<LiveCourseGroupStudentCourseVo> page,
                                                                           @Param("param") LiveCourseGroupStudentCourseSearch query);
}

