import httpClient from '@/utils/http';

import {
  ControllerResponse,
  ExamBatchCalculateRequest,
  ExamBatchOperationResponse,
  ExamBatchPublishRequest,
  ExamCreateExamRequest,
  ExamExamListResponse,
  ExamExamOverviewResponse,
  ExamExamResponse,
  ExamGenerateScoreTemplateRequest,
  ExamGetSubjectListResponse,
  ExamMarkingProgressBySchoolResponse,
  ExamSchoolScanProgressResponse,
  ExamStartGradingRequest,
  ExamStartGradingResponse,
  ExamSyncAnswerSheetMarkingStatusAndQueueRequest,
  ExamUpdateExamRequest
} from './data-contracts';
export default {
  /**
   * @description 创建新的考试，需要指定考试基本信息和关联的学校
   */
  examsCreate: (exam: ExamCreateExamRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 考试信息响应 */
        data?: ExamExamResponse;
      }
    >(`/exams`, { params: exam });
  },
  /**
   * @description 根据查询条件获取考试列表，支持分页和多种筛选条件
   */
  examsList: (query: {
    /**
     * 页码，默认1
     * @min 1
     */
    page?: number;
    /**
     * 每页数量，默认10，最大100
     * @min 1
     * @max 100
     */
    page_size?: number;
    /**
     * 考试名称或创建人(模糊查询)
     * @maxLength 50
     */
    exam_name?: string;
    /** 考试年级：1-初二，2-初三，3-高一，4-高二，5-高三 */
    exam_grade?: string;
    /** 考试类型：1-普通，2-月考，3-周考，4-期中，5-期末，6-竞赛，7-会考 */
    exam_type?: string;
    /** 考试状态：ongoing-进行中，completed-已完成，cancelled-已取消 */
    status?: string;
    /**
     * 科目ID，查询包含特定科目的考试
     * @min 1
     */
    subject_id?: number;
    /**
     * 开始日期，格式：2006-01-02
     * @format date
     */
    start_date?: string;
    /**
     * 结束日期，格式：2006-01-02
     * @format date
     */
    end_date?: string;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        /** 考试列表响应结构 */
        data?: ExamExamListResponse;
      }
    >(`/exams`, { query: query });
  },
  /**
   * @description 根据考试ID批量统分或取消统分该考试的所有科目
   */
  batchCalculateCreate: (calculate: ExamBatchCalculateRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 批量操作的响应结果 */
        data?: ExamBatchOperationResponse;
      }
    >(`/exams/batch-calculate`, { params: calculate });
  },
  /**
   * @description 根据考试ID和科目ID列表发布或取消发布指定科目成绩
   */
  batchPublishCreate: (publish: ExamBatchPublishRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 批量操作的响应结果 */
        data?: ExamBatchOperationResponse;
      }
    >(`/exams/batch-publish`, { params: publish });
  },
  /**
   * @description 根据考试ID和模板类型生成成绩补录的Excel模板文件
   */
  generateScoreTemplateCreate: (request: ExamGenerateScoreTemplateRequest) => {
    return httpClient.download<Blob>(`/exams/generate-score-template`, { params: request });
  },
  /**
   * @description 获取考试中各学校各科目的阅卷进度统计信息
   */
  markingProgressList: (query: {
    /**
     * 考试ID
     * @min 1
     */
    exam_id: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        /** 所有学校的阅卷进度统计 */
        data?: ExamMarkingProgressBySchoolResponse;
      }
    >(`/exams/marking-progress`, { query: query });
  },
  /**
   * @description 获取考试的整体统计信息，包括人员统计、设置完成情况、阅卷进度和综合科拆分情况
   */
  overviewList: (query: {
    /**
     * 考试ID
     * @min 1
     */
    exam_id: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        /** 考试的整体进度和统计信息，按科目列表形式展示 */
        data?: ExamExamOverviewResponse;
      }
    >(`/exams/overview`, { query: query });
  },
  /**
   * @description 获取考试中各学校各科目的扫描进度统计信息，格式为"已扫描数/总数"
   */
  scanProgressList: (query: {
    /**
     * 考试ID
     * @min 1
     */
    exam_id: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        /** 各学校各科目的扫描进度统计 */
        data?: ExamSchoolScanProgressResponse;
      }
    >(`/exams/scan-progress`, { query: query });
  },
  /**
   * @description 根据考试ID和科目ID开始阅卷，将科目状态更改为"阅卷中"
   */
  startGradingCreate: (grading: ExamStartGradingRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 开始阅卷的响应结果 */
        data?: ExamStartGradingResponse;
      }
    >(`/exams/start-grading`, { params: grading });
  },
  /**
   * @description 根据用户权限获取科目列表：管理员获取所有科目，普通用户获取所属学校的科目
   */
  subjectsList: (query: {
    /**
     * 学校ID，查询特定学校的科目
     * @min 1
     */
    school_id?: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        /** 获取科目列表的响应结果 */
        data?: ExamGetSubjectListResponse;
      }
    >(`/exams/subjects`, { query: query });
  },
  /**
   * @description 同步答题卡状态和队列
   */
  syncAnswerSheetMarkingStatusAndQueueCreate: (
    request: ExamSyncAnswerSheetMarkingStatusAndQueueRequest
  ) => {
    return httpClient.post<
      ControllerResponse & {
        message?: string;
      }
    >(`/exams/sync-answer-sheet-marking-status-and-queue`, { params: request });
  },
  /**
   * @description 根据考试ID获取特定考试的详细信息，包含学校列表等完整信息
   */
  examsDetail: (id: number) => {
    return httpClient.get<
      ControllerResponse & {
        /** 考试信息响应 */
        data?: ExamExamResponse;
      }
    >(`/exams/${id}`);
  },
  /**
   * @description 根据ID更新考试信息，支持部分字段更新
   */
  examsUpdate: (id: number, exam: ExamUpdateExamRequest) => {
    return httpClient.put<
      ControllerResponse & {
        /** 考试信息响应 */
        data?: ExamExamResponse;
      }
    >(`/exams/${id}`, { params: exam });
  },
  /**
   * @description 根据ID软删除考试，已发布的考试不允许删除
   */
  examsDelete: (id: number) => {
    return httpClient.delete<
      ControllerResponse & {
        message?: string;
      }
    >(`/exams/${id}`);
  }
};
