package com.qmth.jkserver.service;

import com.qmth.jkserver.model.ExamStudentAnswer;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @Description: 机考数据中心联调云阅卷流程模拟类（测试无误后移植到异步线程）
 * @Author: CaoZixuan
 * @Date: 2021-05-12
 */
public interface JointFlowSimulationService {

    /**
     * 分流程-保存云阅卷考试
     *
     * @param map 同步任务数据
     */
    Map<String, Object> saveYunExam(Map<String, Object> map) throws IOException, IllegalAccessException;

    /**
     * 分流程-保存云阅卷科目
     *
     * @param map       同步任务数据
     */
    Map<String, Object> saveYunSubject(Map<String, Object> map) throws Exception;

    /**
     * 分流程-保存云阅卷考生
     *
     * @param map        同步任务数据
     * @param yunExamId  云阅卷考试id
     * @param examStudentAnswerList 要保存的考生列表
     * @param studentAnswerFileDatasource 考生作答文件资源集
     */
    Map<String, Object> saveYunExamStudent(Map<String, Object> map, int yunExamId, List<ExamStudentAnswer> examStudentAnswerList,List<File> studentAnswerFileDatasource) throws IOException, IllegalAccessException;

    /**
     * 保存试卷和答案
     * @param map 同步任务数据
     * @param yunExamId 云阅卷考试id
     * @param subjectCode 云阅卷同步更新的试卷编号
     * @param file 要同步云阅卷的试卷文件
     * @return 同步任务数据
     */
    Map<String,Object> savePaperAndAnswer(Map<String,Object> map, int yunExamId, String subjectCode, File file) throws IOException, IllegalAccessException;

    /**
     * 保存学生作答记录（JSON文件）
     * @param map 同步任务数据
     * @param yunExamId 云阅卷考试id
     * @param examNumber 学生准考证号
     * @param file 要上传的考生作答JSON文件
     * @return 同步任务数据
     */
    Map<String,Object> saveStudentJson(Map<String,Object> map,int yunExamId,String examNumber,File file) throws IOException, IllegalAccessException;

    /**
     * 根据机考考试编号获取学校key和secret
     * @param jkExamCode 机考考试编号
     * @return 键值对 (key -> "xxx" secret -> "xxx")
     */
    Map<String,String> searchKeyAndSecretByJKExamCode(String jkExamCode);

    /**
     * 根据考试编号清除考试数据
     * @param examCode 考试编号
     */
    void cleanExamDataByExamCode(String examCode);

}
