import httpClient from '@/utils/http';

import {
  CheckScoreListParamsOrderByEnum,
  ControllerResponse,
  ExamCheckScoreResponse,
  ExamGetQuestionMarkingQualityResponse,
  ExamGetScoreDistributionResponse,
  ExamGetStudentMarkingQualityResponse,
  ExamMarkingQualityResponse,
  ExamProblemSheetRereadRequest,
  ExamRereadByRecordIDRequest,
  ExamRereadMarkingRequest,
  ExamRereadMarkingResponse,
  ExamUpdateScoreByRecordIDResponse,
  ExportTeacherDetailListParamsOrderByEnum
} from './data-contracts';
export default {
  /**
   * @description 根据exam_subject_id查询阅卷质量统计，包括客观题和主观题的得分情况
   */
  markingQualityList: (query: {
    /** 考试科目ID */
    exam_subject_id: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: ExamMarkingQualityResponse;
      }
    >(`/marking-quality`, { query: query });
  },
  /**
   * @description 根据题目ID等参数检查打分情况，支持多种过滤和排序条件
   */
  checkScoreList: (query: {
    /** 题目ID（必传） */
    question_id: number;
    /** 学校ID（选填） */
    school_id?: number;
    /** 任务类型（选填） */
    task_type?: string;
    /** 教师ID（选填） */
    teacher_id?: number;
    /** 最终打分（选填） */
    score?: number;
    /** 排序字段（选填） */
    order_by?: CheckScoreListParamsOrderByEnum;
    /** 页码（选填） */
    page?: number;
    /** 每页数量（选填） */
    page_size?: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: ExamCheckScoreResponse;
      }
    >(`/marking-quality/check-score`, { query: query });
  },
  /**
   * @description 根据exam_subject_id导出客观题明细Excel文件，包含题目类型、得分情况等详细信息
   */
  exportObjectiveList: (query: {
    /** 考试科目ID */
    exam_subject_id: number;
  }) => {
    return httpClient.download<Blob>(`/marking-quality/export-objective`, { query: query });
  },
  /**
   * @description 根据exam_subject_id导出所有主观题的阅卷质量Excel文件，包含每个主观题的阅卷情况统计
   */
  exportSubjectiveList: (query: {
    /** 考试科目ID */
    exam_subject_id: number;
  }) => {
    return httpClient.download<Blob>(`/marking-quality/export-subjective`, { query: query });
  },
  /**
   * @description 根据question_id、teacher_id等参数导出老师的评卷明细Excel文件，包含学生信息、评分详情等
   */
  exportTeacherDetailList: (query: {
    /** 题目ID（必传） */
    question_id: number;
    /** 学校ID（选填） */
    school_id?: number;
    /** 任务类型（选填） */
    task_type?: string;
    /** 教师ID（必传） */
    teacher_id: number;
    /** 最终打分（选填） */
    score?: number;
    /** 排序字段（选填） */
    order_by?: ExportTeacherDetailListParamsOrderByEnum;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: string;
      }
    >(`/marking-quality/export-teacher-detail`, { query: query });
  },
  /**
   * @description 根据question_id获取指定题目的阅卷质量统计，包含大题、小题、评价方法、总分数、平均分数等详细信息
   */
  questionQualityList: (query: {
    /** 题目ID */
    question_id: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: ExamGetQuestionMarkingQualityResponse;
      }
    >(`/marking-quality/question-quality`, { query: query });
  },
  /**
   * @description 支持两种方式：1）使用problem_info_ids数组直接传递问题信息ID（推荐）；2）使用question_ids数组传递题目ID，同时必须提供school_id和teacher_id
   */
  rereadCreate: (request: ExamRereadMarkingRequest) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamRereadMarkingResponse;
      }
    >(`/marking-quality/reread`, { params: request });
  },
  /**
   * @description 根据题目ID和答题卡ID打回重阅
   */
  rereadByRecordCreate: (request: ExamRereadByRecordIDRequest) => {
    return httpClient.post<ControllerResponse>(`/marking-quality/reread-by-record`, {
      params: request
    });
  },
  /**
   * @description 根据exam_subject_id获取分数分布统计，支持按学校、教师、评价方法进行过滤
   */
  scoreDistributionList: (query: {
    /** 考试科目ID（必传） */
    exam_subject_id: number;
    /** 题目ID（必传） */
    question_id: number;
    /** 学校ID（选填） */
    school_id?: number;
    /** 教师ID（选填） */
    teacher_id?: number;
    /** 评价方法（选填） */
    evaluate_method?: string;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: ExamGetScoreDistributionResponse;
      }
    >(`/marking-quality/score-distribution`, { query: query });
  },
  /**
   * @description 根据exam_subject_id等参数获取考生的阅卷质量统计，支持按学校、班级、关键词筛选
   */
  studentQualityList: (query: {
    /** 考试科目ID（必传） */
    exam_subject_id: number;
    /** 学校ID（选填） */
    school_id?: number;
    /** 班级（选填） */
    class?: string;
    /** 关键词（选填，模糊搜索学生名称或者学生考号） */
    keyword?: string;
    /** 页码（选填，默认为1） */
    page?: number;
    /** 每页大小（选填，默认为20） */
    page_size?: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: ExamGetStudentMarkingQualityResponse;
      }
    >(`/marking-quality/student-quality`, { query: query });
  },
  /**
   * @description 根据扫描信息ID、题目ID修改评分，直接更新exam_subject_scan_answer_sheet_answer_detail表的final_score字段，并创建新的阅卷记录（记录类型为update_score）
   */
  updateScoreUpdate: (query: {
    /** 扫描信息ID */
    scan_info_id: number;
    /** 题目ID */
    question_id: number;
    /** 新的评分 */
    score: number;
  }) => {
    return httpClient.put<
      ControllerResponse & {
        data?: ExamUpdateScoreByRecordIDResponse;
      }
    >(`/marking-quality/update-score`, { query: query });
  },
  /**
   * @description 根据问题信息ID列表进行问题卷打回重阅
   */
  rereadCreate2: (request: ExamProblemSheetRereadRequest) => {
    return httpClient.post<ControllerResponse>(`/problem-sheet/reread`, { params: request });
  }
};
