package com.ssj.service.conch.teacher.service;

import com.ssj.framework.basic.common.bean.Page;
import com.ssj.framework.core.util.ResponseEntity;
import com.ssj.service.conch.conch.padrequest.PadStartHomeworkRequest;
import com.ssj.service.conch.conch.padrequest.PadUploadHomeworkRequest;
import com.ssj.service.conch.parents.v2.dto.WrongBookKnowledgeDTO2;
import com.ssj.service.conch.parents.v2.dto.WrongBookQuestionDTO;
import com.ssj.service.conch.parents.v2.request.*;
import com.ssj.service.conch.teacher.app.request.QuestionRequest;
import com.ssj.service.conch.teacher.library.dto.HomeworkDataDto;
import com.ssj.service.conch.teacher.library.request.*;
import org.springframework.data.domain.Pageable;

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

/**
 * @author yangcan
 * 类描述:
 * 创建时间:2019/7/9 15:46
 */
public interface TeacherLibraryService {
      /**
       * 我的任务-未完成列表
       * @param userId
       * @return
       */
      ResponseEntity noFinishTaskList(String userId);

      ResponseEntity noFinishTaskListV1(String userId);

      /**
       * 我的任务-已完成列表
       * @param userId
       * @return
       */
      ResponseEntity finishTaskList(String userId);

      ResponseEntity finishTaskListV1(String userId);

    /**
     * 查询未选定学生列表
     * @param userId
     * @return
     */
      ResponseEntity findNoConfirmStudentList(String userId);

    /**
     * 选定学生
     * @param userId，vipList
     * @return
     */
      ResponseEntity confirmStudents(String userId, List<String> vipList);

    /**
     * 查询未选定学生作业列表
     * @param userId，req
     * @return
     */
      ResponseEntity findquestionPictureList(String userId,QuestionRequest request);

    /**
     * 在馆查询学生作业数据
     * @param vipId
     * @param userId
     * @return
     */
    HomeworkDataDto getHomeworkData(String vipId, String userId);

    /**
     * 作业编辑保存
     * @param request
     * @return
     */
    ResponseEntity saveHomeworkSituation (HomeworkDataSubmitRequest request,String accessToken);

    /**
     * 查询学生列表用于签到或签离
     */
    ResponseEntity findSignStudentList(SignStudentListReq req, String teacherId);

    /**
     * 查询所有学生和列表
     */
    ResponseEntity findAllStudentList(StudentNameReq req, String teacherId);

    /**
     * 在馆老师给学生签到或签离
     */
    ResponseEntity sign(SignReq req, String confirmUserId, String libId);

    /**
     * 查询学生往期反馈记录列表
     */
    ResponseEntity findFeedbackHistory(FeedbackPageReq req, Pageable pageable);

    /**
     * 查询学生往期反馈记录详情
     */
    ResponseEntity findFeedbackDetail(FeedbackDetailReq req);

    /**
     * 根据孩子id、科目，查询学生存在错题的知识点的模块
     * @param req 科目
     */
    List<String> findWrongQuestionKnowModuleList(ModuleReq req);

    /**
     * 根据模块查询错题本知识点列表
     * @param req 模块
     * @return
     */
    com.ssj.framework.basic.common.bean.Page<WrongBookKnowledgeDTO2> findWrongQuestionKnowledgePage(WrongQuestionV2Req req, Pageable pageable);

    /**
     * 根据知识点分页查询错题列表
     * @return
     */
    Page<WrongBookQuestionDTO> findWrongBookQuestionPage(WrongBookQuestionReq3 req, Pageable pageable);

    /**
     * 根据作业图片id列表，查询原题列表，如果需要也查询推荐的题目
     */
    ResponseEntity findWrongAndRecommendQuestionList(WrongBookQuestionListReq req);

    /**
     * 根据孩子id、科目，查询学生存在错题的知识点的模块
     * @param req 请求参数
     * @return 维度列表
     */
    List<String> findWrongQuestionKnowModuleListV2(ModuleReqV2 req);

    /**
     * 根据模块查询错题本知识点列表
     * @param req 请求参数
     * @return 知识点列表
     */
    Page<WrongBookKnowledgeDTO2> findWrongQuestionKnowledgePageV2(WrongQuestionV3Req req, Pageable pageable);

    /**
     * 根据知识点分页查询错题列表
     * @param req 请求参数
     * @param pageable 分页
     * @return 响应实体
     */
    ResponseEntity findWrongBookQuestionPageV3(WrongBookQuestionReqV4 req, Pageable pageable);

    /**
     * 根据作业图片id列表，查询原题列表，如果需要也查询推荐的题目
     */
    ResponseEntity findWrongAndRecommendQuestionListV2(WrongBookQuestionListReqV2 req);

    /**
     * 根据作业图片id列表，查询原题列表，如果需要也查询推荐的题目
     */
    ResponseEntity findWrongAndRecommendQuestionListV3(WrongBookQuestionListReqV2 req);

    /**
     * 替换模糊或者不全的作业图片
     * @param request 请求参数实体
     * @return 响应结果
     */
    ResponseEntity replaceBadImg(ReplaceImgReq request);

    /**
     * 老师端上传作业
     * @param request
     * @return
     * @throws Exception
     */
    ResponseEntity noNetworkUploadHomework(PadUploadHomeworkRequest request,String userId) throws Exception;

    /**
     * 开始计时
     * @return
     */
    Map<String, Object> startHomework (PadStartHomeworkRequest request);

    /**
     * 根据孩子id、科目，查询学生存在错题的知识点的模块
     * @param req 请求参数
     * @return 维度列表
     */
    List<String> findWrongQuestionKnowModuleListV3(ModuleReqV3 req);

    /**
     * 根据模块查询错题本知识点列表
     * @param req 请求参数
     * @return 知识点列表
     */
    Page<WrongBookKnowledgeDTO2> findWrongQuestionKnowledgePageV3(WrongQuestionV4Req req, Pageable pageable);

    /**
     * 根据知识点分页查询错题列表
     * @param req 请求参数
     * @param pageable 分页
     * @return 响应实体
     */
    ResponseEntity findWrongBookQuestionPageV4(WrongBookQuestionReqV6 req, Pageable pageable);

    /**
     * 查询学期回顾知识点列表
     * @param req 入参
     * @return 知识点列表
     */
    ResponseEntity findSemesterReviewKnowledgeList(SemesterReviewKnowledgeListReq req);

    /**
     * 查询学期回顾知识点列表v2
     * @param req 入参
     * @return 知识点列表
     */
    ResponseEntity semesterReviewKnowledgeListV2(SemesterReviewKnowledgeListReq req);

    /**
     * 根据知识点列表，查询推荐的题目
     * @param req 入参
     * @return 题目列表
     */
    ResponseEntity findSemesterReviewRecommendQuestionList(TrainRecommendQuestionReqV3 req);

    /**
     * 查询知识点版本列表
     * @param req 入参
     */
    ResponseEntity findKnowledgeVersionList(KnowledgeVersionListReq req);


    /**
     * 校验学生是否删除及服务是否有效，返回无效信息给前端
     * @param req
     * @return
     */
    ResponseEntity checkStudent(VipIdListReq req);

    /**
     * 学生排行榜
     */
    ResponseEntity coreRanking(String teacherId);

}
