package com.ssj.dao.kmt.kmt.dao;

import com.ssj.bean.kmt.kmt.domain.KmtExerciseBookCourse;
import com.ssj.bean.kmt.kmt.domain.KmtExerciseQuestion;
import com.ssj.service.conch.parents.v1.dto.BookDTO;
import com.ssj.service.kmt.dto.ExerciseBookCourseDTO;
import com.ssj.service.kmt.dto.ExerciseQuestionDto;
import com.ssj.service.kmt.request.QuestionDistributeRequest;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

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

public interface KmtExerciseQueryDao {

    /**
     * 查询所有的练习册-单元-课时记录
     * @param subject 科目
     * @param grade 年级
     * @param semester 上下册
     * @param versionType 版本类型
     * @return
     */
    public List<KmtExerciseBookCourse> getAllBookCourse (String subject, String grade, int semester, int versionType);

    /**
     * 查询所有已发布的练习册-单元-课时记录(未完成，待开发)
     * @param subject
     * @param grade
     * @param semester
     * @return
     */
    List<KmtExerciseBookCourse> getAllPublishBookCourse(String subject, String grade, int semester);

    /**
     * 分页查询题目
     * @param  type 类型 1练习册id, 2单元id, 3课时id
     * @param  id 查询的id
     * @param  page 页码
     * @param  dealType 1待加工，2待审核
     * @param  userId 加工/审核用户id
     * @return
     */
    public List<KmtExerciseQuestion> findByTypeAndIdAndPageNo (int type, String id, int page, int dealType, String userId);

    /**
     * 查询练习册题目关联的知识点
     * @param questionIds 题目列表
     * @return
     */
    public List<Map<String, Object>> findHowDetailNameByQuestionIds (List<String> questionIds, int versiontType);

    /**
     * 查询练习册课时列表
     * @param request 上下册
     */
    List<ExerciseBookCourseDTO> getBookExerciseList(QuestionDistributeRequest request);

    /**
     * 根据课时的id查询课时内所有题目的答案
     * @param exerciseBookCourseId
     */
    List<ExerciseQuestionDto> findAnswerByExerciseBookCourseId(String exerciseBookCourseId, int bookYear);

    /**
     * 根据书册, 页码查询课时内所有题目的答案
     * @param bookId
     * @param pageIndex
     * @return
     */
    List<ExerciseQuestionDto> findQuestionByBookIdAndPage(String bookId, String unitId, String bookCourseId,
                                                          List<Integer> pageIndex, int bookYear);

    /**
     * 以题搜题
     * @param questionIds
     * @return
     */
    List<ExerciseQuestionDto> findQuestionByQuestionIds(List<String> questionIds);
    
    List<ExerciseQuestionDto> findQuestionByBookIdAndPageByAll(String bookId, List<Integer> pageIndex);

    /**
     * 根据书册，课时id，页码查询所有题目的答案
     * @param bookId
     * @param courseId
     * @param pageIndex
     * @return
     */
    List<ExerciseQuestionDto> findQuestionByBookIdAndPage(String bookId, String courseId,  int pageIndex);

    /**
     * 根据题目的id查询所关联的练习册的版本
     */
    Integer findKnowledgeVersionById(String questionId);

    /**
     * 根据年级、科目分页查询教辅列表
     * @param grade
     * @param subject 科目
     * @param bookName
     * @param pageable 分页信息
     * @return
     */
    Page<BookDTO> findBookPage(String grade, String subject, String bookName, Pageable pageable);

    /**
     * 根据大题id查询题目及大题本身
     * @param parentQuestionIdList 大题id
     * @return
     */
    List<String> findListAndParentByParentId(List<String> parentQuestionIdList);

    /**
     * 查询练习册信息
     * @param bookIds
     * @return
     */
    List<KmtExerciseBookCourse> findBookDataByBookIds (List<String> bookIds);
    
    
    Page<KmtExerciseQuestion> findKmtExerciseQuestionsByPage(String date,Pageable pageable);
    
}