package com.ynfy.buss.exam.exam.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ynfy.buss.exam.exam.dto.ExamSubmitDTO;
import com.ynfy.buss.exam.exam.dto.UserExamDTO;
import com.ynfy.buss.exam.exam.entity.Exam;
import com.ynfy.buss.exam.question.entity.Question;
import com.ynfy.buss.exam.userexam.entity.UserExam;

import java.util.List;

/**
 * @Description: exam
 * @Author: jeecg-boot
 * @Date: 2023-02-23
 * @Version: V1.0
 */
public interface IExamService extends IService<Exam> {

    Exam detail(String id);

    IPage<Exam> selectExamList(IPage<Exam> page, Exam exam);

    /**
     * 创建考试
     *
     * @param userId
     * @param examId
     * @return
     */
    UserExam createExam(String userId, String examId);


    UserExamDTO examDetail(String userExamId);


    void submitExam(ExamSubmitDTO dto);


    /**
     * 用户考试成绩详情，包括答题卡，试题（包含正确答案）
     *
     * @param userExamId
     * @return
     */
    UserExamDTO userExamResultDetail(String userExamId);

    /**
     * 缓存考试答案，用于定时任务强制交卷
     *
     * @param dto
     */
    void cacheExamAnswer(ExamSubmitDTO dto);

    /**
     * 删除自动交卷任务
     *
     * @param parameter
     */
    void deleteAutoCommitJob(String parameter);

    /**
     * 获取正在进行中的考试
     *
     * @return
     */
    List<String> listExamIng();


    /**
     * 检查试卷是否已经被用于考试
     *
     * @param paperId
     * @return
     */
    boolean checkIsUsedInExam(String paperId);

    /**
     * 获取缓存的考试答案
     *
     * @return
     */
    ExamSubmitDTO getCacheAnswer(String userExamId);


    /**
     * 清除缓存的考试答案
     *
     * @return
     */
    void deleteCacheAnswer(String userExamId);

    /**
     * 检查是否达到考试限制次数
     *
     * @param userId
     * @param examId
     * @return
     */
    Boolean checkToLimit(String userId, String examId);


    /**
     * 检查是否有考试记录
     *
     * @param examId
     * @return
     */
    Boolean examRecordExist(String userId, String examId);

    /**
     * 渲染填空题的题干，填充进答案
     *
     * @param question
     */
    void renderBlank(Question question, String answer);

    /**
     * 生成单选，单选，填空答案tag
     *
     * @param userAnswer
     * @param question
     * @return
     */
    String generateQuestionAnswerTag(String userAnswer, Question question);
}
