import httpClient from '@/utils/http';

import {
  ControllerResponse,
  ExamBatchAbsentOperationResponse,
  ExamBatchSetAbsentToZeroRequest,
  ExamBatchSetZeroToAbsentRequest,
  ExamScoreOverviewResponse,
  ExamSetStudentAbsentRequest,
  ExamStatisticsClassAnalysisRequestVO,
  ExamStatisticsClassAnalysisResponseVO,
  ExamStatisticsGetSubjectQuestionsResponseVO,
  ExamStatisticsQuestionAnalysisRequestVO,
  ExamStatisticsQuestionAnalysisResponseVO,
  ExamStatisticsQuestionExcelExportRequestVO,
  ExamStatisticsQuestionRankingRequestVO,
  ExamStatisticsQuestionRankingResponseVO,
  ExamStatisticsScoreAnalysisRequestVO,
  ExamStatisticsScoreAnalysisResponseVO,
  ExamStatisticsScoreConvertConfigResponseVO,
  ExamStatisticsScoreConvertSaveRequestVO,
  ExamStatisticsScoreConvertSaveResponseVO,
  ExamStatisticsScoreRankingRequestVO,
  ExamStatisticsScoreRankingResponseVO,
  ExamStatisticsSetLevelConfigRequestVO,
  ExamStatisticsSetLevelConfigResponseVO,
  ExamStatisticsStatisticsAnalysisRequestVO,
  ExamStatisticsStatisticsAnalysisResponseVO,
  ExamStatisticsStudentAnswerSheetQuestionsRequestVO,
  ExamStatisticsStudentAnswerSheetQuestionsResponseVO,
  ExamStatisticsSubjectClassAnalysisExcelExportRequestVO,
  ExamStatisticsSubjectClassAnalysisRequestVO,
  ExamStatisticsSubjectClassAnalysisResponseVO,
  ExamStatisticsUpdateStudentObjectiveQuestionRequestVO,
  ExamStudentAbsentOperationResponse,
  ExamStudentScoreListRequest,
  ExamStudentScoreListResponse,
  ScoreReportClassExamComparisonDataVO,
  ScoreReportClassExamComparisonRequestVO
} from './data-contracts';
export default {
  /**
   * @description 将指定学校的缺考学生成绩设置为0分，用于统计计算
   */
  absentToZeroCreate: (request: ExamBatchSetAbsentToZeroRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 批量缺考操作的响应结果 */
        data?: ExamBatchAbsentOperationResponse;
      }
    >(`/exam-statistics/absent-to-zero`, { params: request });
  },
  /**
   * @description 根据条件查询学科的试题统计数据，支持按班级、学校筛选，支持多种分析类型和指标
   */
  averageComparisonCreate: (request: ExamStatisticsQuestionAnalysisRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsQuestionAnalysisResponseVO;
      }
    >(`/exam-statistics/average-comparison`, { params: request });
  },
  /**
   * @description 根据条件获取总分分档上线人数分布，支持按学校或班级分组统计
   */
  classAnalysisCreate: (request: ExamStatisticsClassAnalysisRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsClassAnalysisResponseVO;
      }
    >(`/exam-statistics/class-analysis`, { params: request });
  },
  /**
   * @description 获取指定班级的所有考试对比数据，包括班级平均分、排名、标准分和年级前50名人数
   */
  classExamComparisonCreate: (request: ScoreReportClassExamComparisonRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ScoreReportClassExamComparisonDataVO;
      }
    >(`/exam-statistics/class-exam-comparison`, { params: request });
  },
  /**
   * @description 按班级导出成绩数据，每个班级一个sheet，文件名使用考试名称+成绩表
   */
  exportByClassesList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 班级字典key列表，逗号分隔 */
    class_ids: string;
    /** 教师ID（可选） */
    teacher_id?: number;
    /**
     * 角色标识（可选）
     * @format int32
     */
    role_key?: number;
  }) => {
    return httpClient.download<Blob>(`/exam-statistics/export-by-classes`, { query: query });
  },
  /**
   * @description 按学校分别导出成绩数据，返回压缩包，每个学校一个文件夹
   */
  exportBySchoolsList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 学校ID列表，逗号分隔 */
    school_ids: string;
    /** 文件名前缀（可选） */
    file_name?: string;
    /** 教师ID（可选） */
    teacher_id?: number;
    /**
     * 角色标识（可选）
     * @format int32
     */
    role_key?: number;
  }) => {
    return httpClient.download<Blob>(`/exam-statistics/export-by-schools`, { query: query });
  },
  /**
   * @description 导出总分分档分析数据到Excel文件
   */
  exportClassAnalysisExcelList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 查询模式，可选 class/school */
    query_mode: string;
    /** 学校ID列表，逗号分隔 */
    school_ids?: string;
    /** 班级字典key列表，逗号分隔 */
    class_ids?: string;
    /** 导出文件名 */
    file_name?: string;
    /** 教师ID（可选） */
    teacher_id?: number;
    /**
     * 角色标识（可选）
     * @format int32
     */
    role_key?: number;
  }) => {
    return httpClient.download<Blob>(`/exam-statistics/export-class-analysis-excel`, {
      query: query
    });
  },
  /**
   * @description 导出班级成绩单ZIP文件，每个班级一个Excel，每个科目一个sheet，包含小分排名的所有指标
   */
  exportClassReportsList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 查询模式，可选 class/school */
    query_mode: string;
    /** 班级字典key列表，逗号分隔 */
    class_ids?: string;
    /** 学校ID列表，逗号分隔 */
    school_ids?: string;
    /** 教师ID（可选） */
    teacher_id?: number;
    /**
     * 角色标识（可选）
     * @format int32
     */
    role_key?: number;
  }) => {
    return httpClient.download<Blob>(`/exam-statistics/export-class-reports`, { query: query });
  },
  /**
   * @description 根据条件导出学生成绩排名Excel文件，支持复合表头格式
   */
  exportExcelList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 查询模式，可选 class/school */
    query_mode: string;
    /** 班级字典key列表，逗号分隔 */
    class_ids?: string;
    /** 学校ID列表，逗号分隔 */
    school_ids?: string;
    /** 是否包含总分 */
    include_total_score?: boolean;
    /** 学科ID列表，逗号分隔 */
    subject_ids?: string;
    /** 指标列表，逗号分隔 */
    indicators: string;
    /** 搜索关键词 */
    search_keyword?: string;
    /** 导出文件名 */
    file_name?: string;
    /** 教师ID（可选） */
    teacher_id?: number;
    /**
     * 角色标识（可选）
     * @format int32
     */
    role_key?: number;
  }) => {
    return httpClient.download<Blob>(`/exam-statistics/export-excel`, { query: query });
  },
  /**
   * @description 导出试题分析数据到Excel文件，包含各题目的统计指标和对比数据
   */
  exportQuestionAnalysisExcelList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 学科ID */
    subject_id: number;
    /** 查询模式，可选 class/school */
    query_mode: string;
    /** 班级字典key列表，逗号分隔 */
    class_ids?: string;
    /** 学校ID列表，逗号分隔 */
    school_ids?: string;
    /** 指标列表，逗号分隔 */
    indicators: string;
    /** 分析类型，可选 question/major_question/objective_subjective */
    analysis_type: string;
    /** 是否启用对比 */
    enable_comparison?: boolean;
    /** 题目关键词 */
    question_keyword?: string;
    /** 导出文件名 */
    file_name?: string;
    /** 教师ID（可选） */
    teacher_id?: number;
    /**
     * 角色标识（可选）
     * @format int32
     */
    role_key?: number;
  }) => {
    return httpClient.download<Blob>(`/exam-statistics/export-question-analysis-excel`, {
      query: query
    });
  },
  /**
   * @description 根据条件导出学生题目级成绩排名Excel文件
   */
  exportQuestionRankingExcelCreate: (request: ExamStatisticsQuestionExcelExportRequestVO) => {
    return httpClient.download<Blob>(`/exam-statistics/export-question-ranking-excel`, {
      params: request
    });
  },
  /**
   * @description 导出均分分析数据到Excel文件，包含各班级/学校的统计指标对比
   */
  exportScoreAnalysisExcelList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 科目ID，0为总分 */
    subject_id?: number;
    /** 查询模式，可选 class/school */
    query_mode: string;
    /** 学校ID列表，逗号分隔 */
    school_ids?: string;
    /** 班级字典key列表，逗号分隔 */
    class_ids?: string;
    /** 是否排除缺考科目 */
    exclude_missing_subjects?: boolean;
    /** 缺考门数限制 */
    missing_subject_limit?: number;
    /** 是否包含0分 */
    include_zero_score?: boolean;
    /** 指标列表，逗号分隔 */
    indicators: string;
    /** 导出文件名 */
    file_name?: string;
    /** 教师ID（可选） */
    teacher_id?: number;
    /**
     * 角色标识（可选）
     * @format int32
     */
    role_key?: number;
  }) => {
    return httpClient.download<Blob>(`/exam-statistics/export-score-analysis-excel`, {
      query: query
    });
  },
  /**
   * @description 导出统计分析数据到Excel文件，支持名次统计、分数段统计、比例段统计
   */
  exportStatisticsAnalysisExcelList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 科目ID，0为总分 */
    subject_id?: number;
    /** 查询模式，可选 class/school */
    query_mode: string;
    /** 学校ID列表，逗号分隔 */
    school_ids?: string;
    /** 班级字典key列表，逗号分隔 */
    class_ids?: string;
    /** 分析类型，可选 rank/score/percentile */
    analysis_type: string;
    /** 导出文件名 */
    file_name?: string;
    /** 教师ID（可选） */
    teacher_id?: number;
    /**
     * 角色标识（可选）
     * @format int32
     */
    role_key?: number;
  }) => {
    return httpClient.download<Blob>(`/exam-statistics/export-statistics-analysis-excel`, {
      query: query
    });
  },
  /**
   * @description 根据条件导出学生成绩明细Excel文件，包含学生基本信息和各题目得分详情
   */
  exportStudentScoreDetailExcelList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 考试科目ID */
    exam_subject_id: number;
    /** 学校ID列表，逗号分隔 */
    school_ids?: string;
    /** 学生类型，可选 all/normal/absent */
    student_type?: string;
    /** 关键词：学生姓名或考号 */
    keyword?: string;
  }) => {
    return httpClient.download<Blob>(`/exam-statistics/export-student-score-detail-excel`, {
      query: query
    });
  },
  /**
   * @description 导出学科分档分析数据到Excel文件
   */
  exportSubjectClassAnalysisExcelCreate: (
    request: ExamStatisticsSubjectClassAnalysisExcelExportRequestVO
  ) => {
    return httpClient.download<Blob>(`/exam-statistics/export-subject-class-analysis-excel`, {
      params: request
    });
  },
  /**
   * @description 根据考试ID和学科ID查询学生的题目级成绩排名
   */
  questionRankingCreate: (request: ExamStatisticsQuestionRankingRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsQuestionRankingResponseVO;
      }
    >(`/exam-statistics/question-ranking`, { params: request });
  },
  /**
   * @description 根据条件查询学校或班级的均分分析数据，包括各类统计指标和排名
   */
  scoreAnalysisCreate: (request: ExamStatisticsScoreAnalysisRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsScoreAnalysisResponseVO;
      }
    >(`/exam-statistics/score-analysis`, { params: request });
  },
  /**
   * @description 查询某考试科目的折算配置，返回题目级规则与合并的区间（同系数且相邻）
   */
  scoreConvertConfigList: (query: {
    /** 考试科目ID */
    exam_subject_id: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: ExamStatisticsScoreConvertConfigResponseVO;
      }
    >(`/exam-statistics/score-convert/config`, { query: query });
  },
  /**
   * @description 传入若干题目区间及系数，后端按服务器排序展开成题目ID集合落表，并按折算规则计算并更新总分（未配置题目按系数1）
   */
  scoreConvertSaveCreate: (request: ExamStatisticsScoreConvertSaveRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsScoreConvertSaveResponseVO;
      }
    >(`/exam-statistics/score-convert/save`, { params: request });
  },
  /**
   * @description 获取指定考试科目的成绩总览，包括基本统计信息和排名列表（联考显示学校排名，单校显示班级排名）
   */
  scoreOverviewDetail: (examId: number, examSubjectId: number) => {
    return httpClient.get<
      ControllerResponse & {
        /** 考试科目成绩总览响应 */
        data?: ExamScoreOverviewResponse;
      }
    >(`/exam-statistics/score-overview/${examId}/${examSubjectId}`);
  },
  /**
   * @description 根据条件查询学生成绩排名，支持按班级、学校筛选，支持联考模式和赋分计算，支持按姓名、学号、考号搜索
   */
  scoreRankingCreate: (request: ExamStatisticsScoreRankingRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsScoreRankingResponseVO;
      }
    >(`/exam-statistics/score-ranking`, { params: request });
  },
  /**
   * @description 设置单个学生为缺考或取消缺考状态
   */
  setAbsentCreate: (request: ExamSetStudentAbsentRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 单个学生缺考操作的响应结果 */
        data?: ExamStudentAbsentOperationResponse;
      }
    >(`/exam-statistics/set-absent`, { params: request });
  },
  /**
   * @description 设置考试的统计配置，支持多种配置类型和规则
   */
  statisConfigCreate: (request: ExamStatisticsSetLevelConfigRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsSetLevelConfigResponseVO;
      }
    >(`/exam-statistics/statis-config`, { params: request });
  },
  /**
   * @description 获取指定考试的统计配置信息，支持多种配置类型
   */
  statisConfigList: (query: {
    /** 考试ID */
    exam_id: number;
    /** 配置类型 */
    config_type: string;
    /** 科目ID（可选，不传则返回所有科目配置） */
    subject_id?: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: any;
      }
    >(`/exam-statistics/statis-config`, { query: query });
  },
  /**
   * @description 根据分析类型获取统计分析数据，支持名次统计、分数段统计、比例段统计
   */
  statisticsAnalysisCreate: (request: ExamStatisticsStatisticsAnalysisRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsStatisticsAnalysisResponseVO;
      }
    >(`/exam-statistics/statistics-analysis`, { params: request });
  },
  /**
   * @description 修改成绩-获取学生答题卡题目列表
   */
  studentAnswerSheetQuestionsCreate: (
    request: ExamStatisticsStudentAnswerSheetQuestionsRequestVO
  ) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsStudentAnswerSheetQuestionsResponseVO;
      }
    >(`/exam-statistics/student-answer-sheet-questions`, { params: request });
  },
  /**
   * @description 根据考试ID和学科ID查询学生成绩列表，支持按学校、类型、关键词筛选
   */
  studentScoreListCreate: (request: ExamStudentScoreListRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 学生成绩列表的响应结果 */
        data?: ExamStudentScoreListResponse;
      }
    >(`/exam-statistics/student-score-list`, { params: request });
  },
  /**
   * @description 根据条件获取学科分档上线人数分布，支持按学校或班级分组统计
   */
  subjectClassAnalysisCreate: (request: ExamStatisticsSubjectClassAnalysisRequestVO) => {
    return httpClient.post<
      ControllerResponse & {
        data?: ExamStatisticsSubjectClassAnalysisResponseVO;
      }
    >(`/exam-statistics/subject-class-analysis`, { params: request });
  },
  /**
   * @description 根据考试科目ID获取该科目下所有题目（返回题目ID/大题号/小题号/满分）
   */
  subjectQuestionsList: (query: {
    /** 考试科目ID */
    exam_subject_id: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: ExamStatisticsGetSubjectQuestionsResponseVO;
      }
    >(`/exam-statistics/subject-questions`, { query: query });
  },
  /**
   * @description 修改成绩-更新客观题答案
   */
  updateStudentObjectiveQuestionCreate: (
    request: ExamStatisticsUpdateStudentObjectiveQuestionRequestVO
  ) => {
    return httpClient.post<
      ControllerResponse & {
        data?: string;
      }
    >(`/exam-statistics/update/student-objective-question`, { params: request });
  },
  /**
   * @description 将指定学校的0分学生标记为缺考状态，并删除成绩统计记录
   */
  zeroToAbsentCreate: (request: ExamBatchSetZeroToAbsentRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 批量缺考操作的响应结果 */
        data?: ExamBatchAbsentOperationResponse;
      }
    >(`/exam-statistics/zero-to-absent`, { params: request });
  }
};
