package com.ssj.service.conch.schoolmaster.service;

import com.ssj.framework.core.util.ResponseEntity;
import com.ssj.service.conch.schoolmaster.dto.*;
import com.ssj.service.conch.schoolmaster.request.*;
import com.ssj.service.conch.teacher.dto.TeacherInfoDto;

import org.springframework.data.domain.Pageable;

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

public interface SchoolService {
	
	/**
	 * @param userId
	 * @param req
	 * @return
	
	 * 方法说明:校长端扫卡绑定
	
	 * 创立日期:2018年6月25日 下午3:02:13
	 * 创建人:yangcan
	
	 */
	public ResponseEntity swipeBinding(String userId,SwipeBindingRequest req);
	
    /**
     * 查询校长的人名，头像，关联学生，关联老师人数
     *
     * @param userId 校长id
     * @return
     */
    public ResponseEntity myInfo(String userId);


    /**
     * 615客户管理service总入口
     *
     * @param userId
     * @return
     */
    public CourseManagementInfoDto courseManagementInfo(String userId);

    /**
     * 查询老师详情
     *
     * @param page      分页对象
     * @param teacherId 老师id
     * @return
     */
    public Map<String, Object> searchTeacherDetail(Pageable page, String teacherId);

    /**
     * 分页查询老师辅导的学员列表
     *
     * @param page      分页对象
     * @param teacherId 老师id
     * @return
     */
    public Map<String, Object> searchStudent4Page(Pageable page, String teacherId);

    /**
     * 我的学生
     * @return
     */
    public Map<String, Object> searchStudentList(Pageable pageable, String masterId, String keyword);

    /**
     * 查看老师的详细信息，用于完善信息使用
     *
     * @param teacherId 老师id
     * @return
     */
    public Map<String, Object> searchTeacher4Update(String teacherId);

    /**
     * 完善老师的信息
     *
     * @param request 修改后的老师对象
     * @return
     */
    public void updateTeacherInfo(SearchTeacherDetailsRequest request);


    /**
     * 查看今日课务管理数据
     *
     * @param masterId 校长id
     * @return
     */
    public Map<String, Object> todayAffairsManager(String masterId);

    /**
     * 给老师推送未解答的题目
     *
     * @param bizId
     * @param bizType
     */
    public boolean pushTeacher(String bizId, String bizType, String userId);

    /**
     * 一键催促
     *
     * @param userId
     */
    public void pushAllAffairs(String userId);


    /**
     * @param vipId
     * @return 方法说明:获取学生信息
     * <p>
     * 创立日期:2018年6月7日 下午6:03:46
     * 创建人:yangcan
     */
    public StudentInfoDto findStudentInfo(String vipId);

    /**
     * @param request 方法说明:完善学员信息
     *                <p>
     *                创立日期:2018年6月7日 下午6:03:44
     *                创建人:yangcan
     */
    public void saveStudentInfo(StudentInfoRequest request);

    /**
     * 查看换课老师列表
     * @return
     */
    public ResponseEntity teacherListForStudent(String masterId,ForStudentRequest req);

    /**
     * @param request
     * @param masterUserId

     * 方法说明:一对一辅导授课订单

     * 创立日期:2018年6月9日 下午3:08:25
     * 创建人:yangcan

     */
    public ResponseEntity commitOrder(CommitOrderRequest request,String masterUserId);

    /**
     * @param vipId
     * @return
    
     * 方法说明:查看学生课程表
    
     * 创立日期:2018年6月8日 上午11:31:30
     * 创建人:yangcan
    
     */
    public ResponseEntity courseListForStudent(String masterId, String vipId);
    
    /**
     * @param vipId
     * @param courseCount
     * @param teacherType
     * @return
    
     * 方法说明:计算一对一辅导订单单课次价格
    
     * 创立日期:2018年9月28日 下午4:05:13
     * 创建人:yangcan
    
     */
    public ResponseEntity computeOrderAmount(String vipId,int courseCount,int teacherType);
    
    /**
     * 查询x学生列表
     * @param masterId
     * @param maxCreateTime
     * @param pageable
     * @return
     */
    public Map<String, Object> myStudentList(String masterId, String maxCreateTime, Pageable pageable);

    /**
     * 查询老师列表
     * @param masterId
     * @param maxCreateTime
     * @param pageable
     * @return
     */
    public Map<String, Object> myTeacherList(String masterId, String maxCreateTime, Pageable pageable);

    /**
     * 学员名称搜索学生
     * @param masterId
     * @param key
     * @return
     */
    public List<StudentDto> searchMyStudentList(String masterId, String key);

    /**
     * 按老师姓名搜索老师
     * @param masterId
     * @param key
     * @return
     */
    public List<TeacherDto> searchMyTeacherList(String masterId, String key);

    /**
     * 完善老师信息接口
     */
    public void saveTeacherInfo(TeacherInfoRequest req);


    /**
     * 老师详情接口
     * @param teacherId
     * @return
     */
    TeacherDto teacherDetail (String teacherId, int type);

    /**
     * 推荐老师列表
     * @param masterId
     * @param request
     * @return
     */
    public ResponseEntity teacherListForSystemMatch (String masterId, ForSystemMatchRequest request);

    /**
     * 查询老师的某天排课状况
     * @return
     */
    List<Map<String, String>> teacherCoursePlanDetail (TeacherCoursePlanDetailRequest req);
    
    /**
     * @param kmtCourseId
    
     * 方法说明:更新调课信息
    
     * 创立日期:2018年6月11日 下午4:38:53
     * 创建人:yangcan
    
     */
    public String confirmAdjustSchoolHours(String kmtCourseId);

//    /**
//     *  看老师某一天是否有空挡
//     * @param teacherId
//     * @param dateTime
//     * @return
//     */
//    public boolean isTeacherHasTime4OneDate(String teacherId, String dateTime);

    /**
     * 调整上课时间, 返回提示信息
     */
    public ResponseEntity adjustSchoolHours(AdjustSchoolHoursRequest req);

    /**
     * @param kmtCourseId
     * @param teacherId
     * @return
    
     * 方法说明:
    
     * 创立日期:2018年7月5日 下午2:29:28
     * 创建人:yangcan
    
     */
    public ResponseEntity changeTeacher(String kmtCourseId,String teacherId);

    /**
     * 查询学生订单信息
     */
    List<OrderDto> orderListForStudent (String masterId, String vipId);

    /**
     * 退款进度
     * @param orderId
     * @return
     */
    RefundScheduleDto refundSchedule (String orderId);

//    /**
//     * 同意家长调换老师
//     * @param req
//     * @return
//     */
//    public ResponseEntity confirmAdjustTeacher (ChangeTeacherRequest req);
    
    /**
     * @param orderId
     * @param result
    
     * 方法说明:
    
     * 创立日期:2018年6月13日 下午5:21:51
     * 创建人:yangcan
    
     */
    public void reviewRefund(String orderId,String result,String refuseReason);

    /**
     * 更新老师的基本信息，如一对一授课次数和授课学生数
     */
    void updateTeacherBasicInfo ();

    
    public void orderCallback(String orderNo);

    public void pushTest ();
    
    /**
     * @param bizId
     * @return
    
     * 方法说明:查看一对一服务往期反馈记录列表
    
     * 创立日期:2018年7月9日 下午2:50:57
     * 创建人:yangcan
    
     */
    public ResponseEntity lessonFeedbackHistory(String bizId);
    
    /**
     * @param masterId
     * @param vipId
     * @return
    
     * 方法说明:查看学生一对一产品服务详情
    
     * 创立日期:2018年7月16日 下午3:47:56
     * 创建人:yangcan
    
     */
    public ResponseEntity giveLessonsServiceDetailForStudent(String masterId,String vipId,String subjectName);

    /**
     * 老师个人简历
     * @param teacherId
     * @return
     */
    TeacherInfoDto teacherInfo (String teacherId);

    /**
     * 作业吧服务详情
     * @param vipId
     * @return
     */
    ZybDetailDto studentZybDetail (String vipId);

    /**
     * 老师是否是我的老师
     * @param list 我下过单的老师
     * @param teacherId
     * @return
     */
    boolean isMyTeacher (List<Map<String, Object>> list, String teacherId);


    /**
     * 根据学生的某一节课id查询当前排课中的所有上课时间及状态
     * @param courseId
     * @return
     */
    List<CourseDateDataDto> findStudentCourseData(String courseId, String time);
    
    /**
     * @param kmtCourseId
     * @param refuseReason
     * @return
    
     * 方法说明:拒绝调课
    
     * 创立日期:2018年9月30日 上午10:47:02
     * 创建人:yangcan
    
     */
    public ResponseEntity refuseAdjustSchoolHours(String kmtCourseId,String refuseReason);
    
    /**
     * @param kmtCourseId
     * @param refuseReason
     * @return
    
     * 方法说明:拒绝换老师
    
     * 创立日期:2018年9月30日 上午10:47:10
     * 创建人:yangcan
    
     */
    public ResponseEntity refuseAdjustTeacher(String kmtCourseId,String refuseReason);

    /**
     * 获取老师排课状况第二版接口
     * @return
     */
    List<Map<String, String>> getTeacherCourseTimeDetail (TeacherCoursePlanDetailRequest request);

    /**
     * 把校长的libId转成in查询的字符串语句
     *
     * @param masterId 校长id
     */
    String parseLibId2Str(String masterId);

    Map<String, Object> checkCooperate (String libIds);

    /**
     * 小课授课老师列表
     * @param masterId
     * @param request
     * @return
     */
    List<TeacherDto> teacherList4Group (String masterId, Teachers4GroupRequest request);

    /**
     * 把老校长的一对一业务转到新校长名下
     * @param oldMasterId
     * @param masterId
     */
    void masterFinishBusiness (String oldMasterId, String masterId);

}
