package com.ssj.service.kmt.service;

import com.ssj.bean.kmt.kmt.domain.KmtCourse;
import com.ssj.framework.core.common.service.BaseService;
import com.ssj.framework.core.util.ResponseEntity;
import com.ssj.bean.kmt.kmt.dto.CourseHandoutTemplate;
import com.ssj.bean.kmt.kmt.dto.LessonGroupDTO;
import org.springframework.ui.Model;

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

public interface KmtCourseService  extends BaseService<KmtCourse, String> {

	
	List<Map<String,Object>> findCourseByList(String teacherId);
	
	List<List<Map<String, Object>>>  findHowByCourseNameByName(String libId, String courseName, String grade, String semester, String type, String name);



	KmtCourse findCourseByKnowId(String courseKnowId);
	
	KmtCourse findFaceCourseByTime(String teacherId, String courseTime, String startTime);
	
	KmtCourse findFaceCourseByTime(String teacherId);
	
	List<List<Map<String, Object>>>  findHowByCourseNameByHowName(String libId, String courseName, String grade, String semester, String type, String name);
	
	List<Map<String, Object>> getTeachCount(String[] teacherIds);

	List<Map<String, Object>> getTeachStudentCount(String[] teacherIds);

	int countDistinctByTeacherId(String teacherId);

	String getMyTeacherId(String vipId);

	/**
	 * 查询某一天某个学生的老师id
	 * @param vipId
	 * @param date
	 * @return
	 */
	String getMyTeacherId(String vipId, String date);

	/**
	 * 结束时间为两个小时以后
	 * @param beginDate 开始时间
	 * @return
	 */
	List<String> findNoTimeTeacher(String beginDate);

	/**
	 * 没有空档的老师id列表
	 * @param beginTime
	 * @param endTime
	 * @param date
	 * @return
	 */
	List<String> findNoTimeTeacher(String beginTime, String endTime, String date);

	/**
	 * 通过星期查询没有空档老师
	 * @param beginTime
	 * @param endTime
	 * @param weeks
	 * @return
	 */
	List<String> findNoTimeTeacherByWeek(String beginTime, String endTime, int[] weeks);

	/**
	 * 通过星期查询没有空档老师
	 * @param beginTime
	 * @param endTime
	 * @param weeks
	 * @param teacherId 传入的有排课计划的老师
	 * @return
	 */
	List<String> findNoTimeTeacherByWeek(String beginTime, String endTime, int[] weeks, List<String> teacherId);

	/**
	 * 判断一个老师是否有空档
	 * @param beginTime
	 * @param endTime
	 * @param date
	 * @param teacherId
	 * @return
	 */
	boolean isHasTime(String beginTime, String endTime, String date, String teacherId);

	/**
	 * 根据老师id查询所有排课
	 * @param teacherId
	 * @return
	 */
	List<KmtCourse> findByTeacherId(String teacherId);

	/**
	 * 查询授课中的学员列表
	 * @param teacherId
	 * @param name
	 * @param grade
	 * @return
	 */
	List<Map<String,Object>> findStudentByList(String teacherId, String name, String grade);

	/**
	 * 查询授课中的学员列表
	 * @param teacherId
	 * @param name
	 * @param grade
	 * @return
	 */
	List<Map<String,Object>> findSimpleStudentByList(String teacherId, String name, String grade);

	/**
	 * 通过学生姓名查询作业吧用户信息
	 * @param name
	 * @return
	 */
	List<Map<String, Object>> findLibVipByList(String name);

	/**
	 * 通过服务id查询排课情况
	 * @param sid
	 * @return
	 */
	List<KmtCourse> findByLessionServiceId(String sid);

	/**
	 * 找出所有serviceid的第一条记录
	 * @param ids
	 * @return
	 */
	List<KmtCourse> findByLessionServiceIdIn(String[] ids);

	/**
	 * 查询老师某一天的排课情况
	 * @param teacherId
	 * @param date
	 * @return
	 */
	List<KmtCourse> findKmtCourseByTeacherAndDate(String teacherId, String date);

	/**
	 * 查询学生的接下来上课的时间和上课的周期
	 * @param vipId
	 * @return
	 */
	List<Map<String, Object>> findTimeAndWeek(String vipId);

	/**
	 * 查询未上课的课程
	 * @param vipId
	 * @return
	 */
	List<KmtCourse> findCourseByVipId(String vipId);
	
	/**
	 * 老师确认上课意向
	 * @param
	 * @return
	 */
	void confirmLesson(KmtCourse course);
	
	
	/**
	 * @param teacherId
	 * @param startTime
	 * @param endTime
	 * @param courseTime
	 * @return
	
	 * 方法说明:验证老师是否有空档
	
	 * 创立日期:2018年7月2日 下午4:13:51
	 * 创建人:yangcan
	
	 */
	boolean validateTeacherCourse(String teacherId, String startTime, String endTime, String courseTime);
	
	List<KmtCourse> findByVipIdAndLessonServiceIdAndPlanStatusLessThan(String vipId, String lessonServiceId, int planStatus);
	
	
	List<String> findTeachersByLessonServiceId(String lessonServiceId);
	
	int countByCurrentMonthFinishLesson(String lessonServiceId, String monthBeginTime, String monthEndTime);

	/**
	 * 查询这个老师的授课数
	 * @param teacherId
	 * @return
	 */
	int countIsFinishCourse(String teacherId);

	/**
	 * 通过vipId和日期查询课程
	 * @param vipId
	 * @param date
	 * @param isGroup
     * @return
	 */
	List<String> findByVipIdAndDate(String vipId, String date, Integer isGroup);
	
	
	List<KmtCourse> findByLessonServiceId(String lessonServiceId);

	
	List<KmtCourse> findFinishCourseByVipIdAndTimes(String vipId, String startTime, String endTime);

    /**
     * 查询知识点数据
     * @param courseName
     * @param grade
     * @param name
     * @param semester
     * @param queryKdlist
     * @param topic
     * @return
     */
    ResponseEntity howList(String courseName, String grade, String name, String semester, String queryKdlist, String topic);

	List<CourseHandoutTemplate> findCourseHandoutTemplateList(String teacherId, String courseName, String courseHandoutTemplateName);

    ResponseEntity applyTemplate(String groupCourseId, String courseKnowTemplateId);

	/**
	 * 查找小组备课信息
	 * @param groupCourseId
	 * @return
	 */
	List<KmtCourse> findByGroupCourseId(String groupCourseId);

	List<KmtCourse> findCourseListByLessonGroupIdAndPlanStatus(String lessonGroupId, List<Integer> planStatusList);

	List<LessonGroupDTO> findLessonGroupList(String teacherId, String courseTime);

	String findLessonGroupDetail(Model model, String lessonGroupId, String groupCourseId, String teacherId);

	ResponseEntity modifyLessonGroupName(String lessonGroupId, String newName, String teacherId);

	List<Date> findLessonGroupDateList(String teacherId);
	
	public List<KmtCourse> findFaceCourseByGroupIdAndChildNameAndFlowId(String lessonGroupId, String childName, String flowId);
	
	public List<Map<String,Object>> finishHandout(String lessonGroupId);


	/**
	 * 查询所有老师的平均评价
	 * @return
	 */
	List<Map<String, Object>> findAllTeacherPraise();

	/**
	 * 查询所有已完课但家长未评价的课程
	 * @return
	 */
	List<KmtCourse> findAllUnPraiseCourse();
	
	public KmtCourse findByLessonGroupIdAndVipId(String lessonGroupId, String vipId);
	
	/**
	 * @param lessonGroupId
	 * @param currentCount
	 * @return
	
	 * 方法说明:校验当前小课是否备课
	
	 * 创立日期:2018年12月21日 上午10:14:00
	 * 创建人:yangcan
	
	 */
	public boolean validateGroupCourseKnow(String lessonGroupId, int currentCount);

	/**
	 * 统计小组总课次（每个学生的总课次之和）
	 */
    Integer countCourseSumByLessonGroupId(String lessonGroupId);
    
    public KmtCourse findCourseRandomStudent(String lessonGroupId);
}
