package com.ssj.service.conch.parents.service;

import com.ssj.bean.sys.appinfo.bean.AppInfo;
import com.ssj.bean.sys.homework.domain.Homework;
import com.ssj.bean.weixin.libmy.domain.LibVip;
import com.ssj.bean.weixin.libmy.domain.TbLibSubscribe;
import com.ssj.bean.weixin.zyb.domain.ZuoybStudentPush;
import com.ssj.framework.core.security.exception.CommonException;
import com.ssj.framework.core.util.ResponseEntity;
import com.ssj.service.conch.parents.dto.*;
import com.ssj.service.conch.parents.request.CourseHowReq;
import com.ssj.service.conch.parents.request.FindProblemRequest;
import com.ssj.service.conch.parents.request.OrderReq;
import com.ssj.service.conch.parents.request.QuerySchoolList;
import com.ssj.service.conch.parents.request.version4.*;
import com.ssj.service.conch.parents.v1.dto.CorrectDetailDto3;
import com.ssj.service.conch.parents.v1.dto.CorrectDetailDto4;
import com.ssj.service.conch.schoolmaster.request.TeacherCoursePlanDetailRequest;
import com.ssj.service.conch.zyb.request.ZuoybDayReq;
import com.ssj.service.kmt.dto.TestPointDTO;
import org.springframework.data.domain.Pageable;

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


public interface ParentService {
	ResponseEntity appAuthlogin(ParentAuthLoginReq req);

	/**
	 * @param parentId
	 * @return
	
	 * 方法说明:家长获取我的信息
	
	 * 创立日期:2018年8月6日 下午2:39:12
	 * 创建人:yangcan
	
	 */
	ParentsInfoDto getMyInfo(String parentId);

	/**
	 * @param request
	 * @return
	
	 * 方法说明:获取学校列表
	
	 * 创立日期:2018年8月6日 下午2:38:32
	 * 创建人:yangcan
	
	 */
	List<Map<String, Object>> getSchoolList(QuerySchoolList request);

	/**
	 * @param parentUserId
	 * @return
	
	 * 方法说明:获取爸妈说消息列表
	
	 * 创立日期:2018年8月6日 下午2:38:40
	 * 创建人:yangcan
	
	 */
	List<ParentsSayDto> getSayList(String parentUserId);

	/**
	 * 单科作业批改详情字段校验
	 * @param vipId
	 * @param subject
	 * @param date
	 * @return
	 */
	Map<String, Object> correctDetail(String vipId, String subject, String date);

	/**
	 * 查询单科批改详情并封装
	 * @param vipId
	 * @param subject
	 * @param date
	 * @return
	 */
	CorrectDetailDto correctDetailResult(String vipId, String subject, String date);

	/**
	 * 查询今日作业任务
	 * @param vipId
	 * @return
	 */
	TodayTaskDto searchTodayHomeworkTask(String vipId);


	/**
	 * 通过小塾作业和作业吧的作业
	 * @param subject
	 * @param sconHomework
	 * @return
	 */
	SubjectTaskDto assembleSubjectTask(String subject, List<Homework> sconHomework, String vipId);

	/**
	 * 通过scon_homework设置状态以及开始时间
	 * @param task
	 * @param homework
	 */
	void parseStatusAndTime(SubjectTaskDto task, Homework homework);

	/**
	 * 判断当前作业是否已完成
	 * @param list
	 * @return
	 */
	boolean isFinishTodaysHomework(List<SubjectTaskDto> list);

	/**
	 * 历史work的作业详情
	 * @param subject
	 * @param vipId
	 * @param date 日期
	 * @param sconHomework
	 * @return
	 */
	SubjectTaskDto assembleDoneSubjectTask(String subject, String vipId, Date date, List<Homework> sconHomework);

	/**
	 * 分页查询历史记录
	 * @param vipId
	 * @param maxCreateTime
	 * @param pageable
	 * @return
	 */
	Map<String, Object> getHistoryTask(String vipId, String maxCreateTime, Pageable pageable);

	/**
	 * 通过实践列表查询这几天的当天作业任务
	 * @param dateList
	 * @param vipId
	 * @return
	 */
	List<HistoryTaskDto> getPageHistoryTask(List<Map<String, Object>> dateList, String vipId);

	/**
	 * 查询某一天的作业任务
	 * @param vipId
	 * @param date
	 * @return
	 */
	HistoryTaskDto getSimpleHistoryTask(String vipId, Date date);

	/**
	 * 查询某一天的作业任务, 带作业内容
	 * @param date
	 * @param push
	 * @return
	 */
	HistoryTaskDto getSimpleHistoryTask(LibVip vip, Date date, List<Homework> sconHomework, ZuoybStudentPush push, TbLibSubscribe subscribe);

	/**
	 * 装配历史版本中的公共部分
	 * @param date
	 * @param homework
	 * @param push
	 * @param libraryFlag
	 * @return
	 */
	HistoryTaskDto getCommonPartHistoryTask(LibVip vip, Date date, List<Homework> homework, ZuoybStudentPush push, int libraryFlag);

	/**
	 * 作业报告
	 * @param vipId
	 * @param date
	 * @return
	 */
	Map<String, Object> homeworkReport(String vipId, String date);

	/**
	 * 是否完成评价
	 * @param vipId
	 * @param date
	 * @return
	 */
	boolean isAssessed(String vipId, Date date);

	/**
	 * 查询所有科目的批改详情
	 * @param vipId
	 * @param date
	 * @return
	 */
	List<CorrectDetailDto>  getCorrectDetails(String vipId, Date date);

	/**
	 * 获取学习状态列表
	 * @param vipId
	 * @param date
	 * @return
	 */
	List<Map<String, String>> getLearningStatus(String vipId, Date date);

	/**
	 * 查询课堂评价
	 * @param vipId
	 * @param date
	 * @return
	 */
	Map<String, Object> queryAssessment(String vipId, String date);

	/**
	 * 提交课堂评价
	 * @param req
	 */
	void submitAssessment(AssessmentReq req);
	
	/**
	 * @param vipId
	 * @return
	
	 * 方法说明:获取小孩资料
	
	 * 创立日期:2019年3月13日 上午10:54:17
	 * 创建人:yangcan
	
	 */
	public ChildDto getMyChildInfo(String vipId);
	
	/**
	 * @param userId
	 * @param vipId
	 * @return
	
	 * 方法说明:获取小孩资料
	
	 * 创立日期:2019年3月13日 上午10:45:44
	 * 创建人:yangcan
	
	 */
	ChildDto getMyChildInfo(String userId,String vipId);
	
	/**
	 * @param req
	
	 * 方法说明:修改小孩资料
	
	 * 创立日期:2018年8月6日 下午2:37:25
	 * 创建人:yangcan
	
	 */
	void upMyChildInfo(ChildInfoReq req) throws CommonException;


	/**
	 * 学情整体情况
	 * @param vipId
	 * @return
	 */
    LearningSituationAbstractDto learningSituationAbstract(String vipId);


	/**
	 * 学情学科情况
	 * @param vipId
	 */
	LearningSituationDetailDto learningSituationDetail(String vipId, String subject);

	/**
	 * @param req
	 * @param accessToken
	 * @return
	
	 * 方法说明:一对一我的订单支付，返回小程序或者微信app所需支付参数
	
	 * 创立日期:2018年8月6日 下午2:37:32
	 * 创建人:yangcan
	
	 */
	ResponseEntity payOrder(PayOrderReq req, String accessToken);

	/**
	 * @param params
	 * @param pageable
	 * @return
	
	 * 方法说明:查询小孩小时光列表
	
	 * 创立日期:2018年8月6日 下午2:38:01
	 * 创建人:yangcan
	
	 */
	Map<String, Object> childSmarttimeList(Map<String, Object> params, Pageable pageable);
	
	/**
	 * @param userId
	 * @param orderNo
	 * @return
	
	 * 方法说明:一对一发起退款，返回退款相应信息
	
	 * 创立日期:2018年8月6日 下午2:36:35
	 * 创建人:yangcan
	
	 */
	ResponseEntity applyOrderRefund(String userId, String orderNo);
	
	/**
	 * @param userId
	 * @param req
	 * @return
	 * @throws Exception

	 * 方法说明:一对一确认退款

	 * 创立日期:2018年8月6日 下午4:46:19
	 * 创建人:yangcan

	 */
	ResponseEntity confirmOrderRefund(String userId, ConfirmRefundReq req) throws Exception;




	/**
	 * @param userId
	 * @param req
	 * @return

	 * 方法说明:一对一查询我的订单信息

	 * 创立日期:2018年8月6日 下午4:47:28
	 * 创建人:yangcan

	 */
	ResponseEntity myOrdersInfo(String userId, OrderReq req);


	/**
	 * @param req
	 * @return

	 * 方法说明:知识图谱

	 * 创立日期:2018年8月6日 下午5:58:54
	 * 创建人:yangcan

	 */
	ResponseEntity knowledgeAtlas(CourseHowReq req);

	/**
	 * @param vipId
	 * @return

	 * 方法说明:学习历史-当日学习任务日历

	 * 创立日期:2018年8月6日 下午6:03:37
	 * 创建人:yangcan

	 */
	ResponseEntity recent(String vipId);


	/**
	 * @param req
	 * @return

	 * 方法说明:学习历史-历史学习任务日历查询

	 * 创立日期:2018年8月6日 下午5:59:35
	 * 创建人:yangcan

	 */
	ResponseEntity calendarTrack(ZuoybDayReq req);

	/**
	 * 一对一反馈-查看课堂评价
	 * @param req
	 * @return
	 */
	ResponseEntity getCourseAssessment(CourseReq req);

	/**
	 * 一对一反馈-课堂评价
	 * @param req
	 * @return
	 */
	ResponseEntity upCourseAssessment(CourseAssessmentReq req);

	/**
	 * 一对一反馈报告
	 * @param req
	 * @param accessToken
	 * @return
	 */
    ResponseEntity lessonFeedbackDetails(CourseReq req, String accessToken);

	/**
	 * 一对一往期反馈记录
	 * @param req
	 * @return
	 */
    ResponseEntity lessonFeedbackList(LessonReq req);

    /**
     * 一对一任务日历反馈记录
     * @param req
     * @return
     */
    ResponseEntity calendarLessonFeedback(HomeworkReportReq req);

	/**
	 * 查询未解答难题列表
	 * @param req
	 * @param pageable
	 * @return
	 */
	ResponseEntity unAnsweredProblemList(UnAnsweredProblemReq req, Pageable pageable);

	/**
	 * 查询已解答难题列表
	 * @param req
	 * @param pageable
	 * @return
	 */
	ResponseEntity answeredProblemList(AnsweredProblemReq req, Pageable pageable);

	/**
	 * 任务日历查询某天已解答难题列表
	 * @param req
	 * @return
	 */
	ResponseEntity calendarAnsweredProblem(AnswdProblemOnedayReq req);

	/**
	 * 已解答难题知识点汇总
	 * @param req
	 * @return
	 */
	ResponseEntity answeredProblemKnowHow(ProblemKnowHowReq req);

	/**
	 * 查询已解答难题详情
	 * @param req
	 * @return
	 */
	ResponseEntity answeredProblemDetail(FindProblemRequest req);
	
	/**
	 * @param userId
	 * @param vipId
	 * @return
	
	 * 方法说明:家长一对一列表模块
	
	 * 创立日期:2019年3月11日 下午5:41:35
	 * 创建人:yangcan
	
	 */
	ResponseEntity lessonServiceManager(String userId,String vipId);
	
	/**
	 * @param req
	
	 * 方法说明:家长申请调课
	
	 * 创立日期:2018年8月8日 上午10:54:45
	 * 创建人:yangcan
	
	 */
	ResponseEntity applyCourseTime(ApplyCourseTimeReq req);
	
	/**
	 * @param req
	
	 * 方法说明:家长申请换老师
	
	 * 创立日期:2018年8月8日 下午1:54:24
	 * 创建人:yangcan
	
	 */
	ResponseEntity applyChangeTeacher(ApplyTeacherReq req);
	
	/**
	 * @param lessonServiceId
	 * @return
	
	 * 方法说明:换老师家长确认
	
	 * 创立日期:2018年8月8日 下午1:50:25
	 * 创建人:yangcan
	
	 */
	ResponseEntity confirmTeacher(String lessonServiceId);
	
	/**
	 * @param req
	 * @return
	
	 * 方法说明:获取当前老师排课状况
	
	 * 创立日期:2018年8月8日 下午3:35:33
	 * 创建人:yangcan
	
	 */
	List<Map<String, String>> teacherCoursePlanDetail(TeacherCoursePlanDetailRequest req);

	/**
	 * 获取家长端轮播图片
     * @param phoneType
	 * @return
	 */
	ResponseEntity getPhotoList(String phoneType);

    /**
     * 获取家长端轮播图片
     * @param phoneType
     * @return
     */
    ResponseEntity getNewPhotoList(String phoneType);

	/**
	 * 获取系统消息
	 * @param req
	 * @param pageable
	 * @return
	 */
	ResponseEntity getMessageList(MessageReq req, Pageable pageable);

	/**
	 * 获取版本
	 * @param type
	 * @return
	 */
	AppInfo getVersion(int type);
	
	/**
	 * @param userId
	 * @param req
	
	 * 方法说明:更新推送提醒设置
	
	 * 创立日期:2018年8月22日 下午7:10:29
	 * 创建人:yangcan
	
	 */
	void setPushRemind(String userId, PushRemindReq req);

	/**
	 * 学霸一对一反馈报告
	 * @param courseId
	 */
	SuperScholarFeedbackDto superScholar121Feedback(String courseId);

	/**
	 * 发送短信
	 * @param phoneNumber
	 * @param type 1-用户注册，2-登陆验证
	 * @return
	 * @throws Exception
	 */
	ResponseEntity sendSms(String phoneNumber,int type) throws Exception;

	/**
	 * 确认验证码
	 * @param phoneNumber
	 * @param code
	 * @return
	 * @throws Exception
	 */
	ResponseEntity confirmSms(String phoneNumber,String code);

	/**
	 * 根据学生id和日期查询作业反馈报告
	 * @param vipId
	 * @param date
	 * @return
	 */
    Map<String, Object> findHomeworkReport(String vipId, String date);
    
    /**
     * @param vipId
     * @return
    
     * 方法说明:获取孩子定位信息
    
     * 创立日期:2018年11月27日 下午4:31:24
     * 创建人:yangcan
    
     */
    public ResponseEntity getChildLocation(String vipId);

	/**
	 * 根据学生id和日期查询作业反馈报告
	 */
    Map<String, Object> findHomeworkReport2(String vipId, String date);

    Map<String, Object> correctDetail2(String vipId, String subject, String date);

	/**
	 * 根据学生id和日期查询作业反馈报告
	 */
	Map<String, Object> findHomeworkReport3(String vipId, String date, String parentId);

	/**
	 * 查询单科批改详情
	 * @param vipId 学生id
	 * @param subject 科目
	 * @param date 日期
	 */
    CorrectDetailDto3 correctDetail3(String vipId, String subject, String date);

	/**
	 * 知识图谱
	 * @param req
	 * @return
	 */
	Map<String, Object> knowledgeAtlasNew(CourseHowReq req);

	/**
	 * 知识图谱查询考点列表
	 * @param req
	 * @return
	 */
	List<TestPointDTO> getKnowledgeAtlasPoints(AtlasPointsReq req);

	/**
	 * 根据学生id和日期查询作业反馈报告
	 */
    Map<String, Object> findHomeworkReport4(String vipId, String date, String parentId, boolean hideReportIfAbsent);

	/**
	 * 查询单科批改详情
	 * @param vipId 学生id
	 * @param subject 科目
	 * @param date 日期
	 */
    CorrectDetailDto4 correctDetail4(String vipId, String subject, String date);


}