package com.ym.mec.biz.service;

import com.ym.mec.biz.dal.dto.CourseScheduleDto;
import com.ym.mec.biz.dal.dto.PracticeGroupDto;
import com.ym.mec.biz.dal.dto.SimpleUserDto;
import com.ym.mec.biz.dal.dto.TeacherBasicDto;
import com.ym.mec.biz.dal.entity.PracticeGroup;
import com.ym.mec.biz.dal.page.PracticeGroupQueryInfo;
import com.ym.mec.common.page.PageInfo;
import com.ym.mec.common.service.BaseService;

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

public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {

	/**
	 * @describe 获取学生的陪练课
	 * @author Joburgess
	 * @date 2020/2/3
	 * @param userId:
	 * @return java.util.List<com.ym.mec.biz.dal.dto.CourseScheduleDto>
	 */
	List<CourseScheduleDto> findUserPracticeCourses(Integer userId);

	/**
	 * 给学生指派老师
	 * @param practiceGroup: 申请参数
	 * @return
	 */
	Integer searchTeacherId(PracticeGroup practiceGroup);

	/**
	 * @describe 给广州分部的学生指派老师
	 * @author Joburgess
	 * @date 2020/2/4
	 * @param practiceGroup:
	 * @return java.lang.Integer
	 */
	Integer searchTeacherIdForGuangZhou(PracticeGroup practiceGroup);

    /**
     * @describe 获取陪练课预约参数
     * @author Joburgess
     * @date 2020/1/31
     * @param userId: 用户编号
     * @return java.util.Map
     */
    Map getPracticeApplyParams(Integer userId);

    /**
     * @describe 获取可以预约的教师
     * @author Joburgess
     * @date 2020/2/9
     * @param userId: 用户编号
     * @param subjectId: 声部编号
     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
     */
	List<SimpleUserDto> getEnableApplyTeachers(Integer userId, Integer subjectId);

	/**
	 * @describe 获取指定教师的空闲时间
	 * @author Joburgess
	 * @date 2020/2/10
	 * @param userId: 用户编号
	 * @param teacherId: 教师编号
	 * @param firstClassTime: 第一节课开始时间
	 * @return java.util.Map
	 */
	Map getTeacherFreeTimes(Integer userId, Integer teacherId, Date firstClassTime);

    /**
     * @describe 获取指定学员所在分部下的教师空闲时间
     * @author Joburgess
     * @date 2020/2/2
     * @param userId: 用户编号
	 * @param subjectId: 声部编号
     * @param firstClassTime: 第一节课开始时间
     * @return java.util.Map
     */
    Map getTeachersFreeTimes(Integer userId, Integer subjectId, Date firstClassTime);

    /**
     * @describe 获取指定日期内课一预约课程的时间
     * @author Joburgess
     * @date 2020/2/2
     * @param startDay: 天数
     * @param endDay: 天数
     * @return java.util.Map
     */
	List<Date> getEnableApplyDates(Date startDay,Date endDay);

    /**
     * @describe 陪练课预约
     * @author Joburgess
     * @date 2020/1/31
     * @param practiceGroup: 预约信息
     * @return java.util.Map
     */
    Map practiceApply(PracticeGroup practiceGroup);

	/**
	 * @describe 陪练课预约2
	 * @author Joburgess
	 * @date 2020/1/31
	 * @param practiceGroup: 预约信息
	 * @return java.util.Map
	 */
	Map practiceApply2(PracticeGroup practiceGroup);

	/**
	 * 获取陪练课列表
	 * @param queryInfo
	 * @return
	 */
	PageInfo<PracticeGroupDto> findPracticeGroups(PracticeGroupQueryInfo queryInfo);

	/**
	 * 获取陪练课课程计划
	 * @param queryInfo
	 * @return
	 */
	Object findPracticeGroupCourseSchedules(PracticeGroupQueryInfo queryInfo);
}
