import httpClient from '@/utils/http';

import {
  ControllerResponse,
  ModelCreateExamAnalysisSettingRequest,
  ModelExamAnalysisSettingListResponse,
  ModelExamAnalysisSettingResponse,
  ModelUpdateExamAnalysisSettingRequest
} from './data-contracts';
export default {
  /**
   * @description 创建一个新的成绩分析设置，用于配置考试成绩分析的各种参数和筛选条件；同一考试仅保存一条记录，多个科目通过 exam_subject_ids 逗号分隔传入
   */
  examAnalysisSettingCreate: (request: ModelCreateExamAnalysisSettingRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 成绩分析设置响应结构 */
        data?: ModelExamAnalysisSettingResponse;
      }
    >(`/exam-analysis-setting`, { params: request });
  },
  /**
   * @description 获取成绩分析设置列表，支持分页和筛选，用户只能看到公开的设置和自己创建的设置
   */
  examAnalysisSettingList: (query: {
    /**
     * 页码，默认为1
     * @default 1
     */
    page?: number;
    /**
     * 每页数量，默认为10，最大100
     * @default 10
     */
    page_size?: number;
    /** 考试ID筛选 */
    exam_id?: number;
    /** 考试科目ID列表（逗号分隔） */
    exam_subject_ids?: string;
    /** 创建人ID筛选 */
    creator_id?: string;
    /** 关键词搜索（设置名称） */
    keyword?: string;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        /** 成绩分析设置列表响应结构 */
        data?: ModelExamAnalysisSettingListResponse;
      }
    >(`/exam-analysis-setting`, { query: query });
  },
  /**
   * @description 根据考试ID获取该考试下所有科目配置的数据（受权限与可见性约束）
   */
  examSubjectsDetail: (examId: number) => {
    return httpClient.get<
      ControllerResponse & {
        /** 成绩分析设置列表响应结构 */
        data?: ModelExamAnalysisSettingListResponse;
      }
    >(`/exam-analysis-setting/exam/${examId}/subjects`);
  },
  /**
   * @description 根据设置ID获取成绩分析设置的详细信息
   */
  examAnalysisSettingDetail: (id: number) => {
    return httpClient.get<
      ControllerResponse & {
        /** 成绩分析设置响应结构 */
        data?: ModelExamAnalysisSettingResponse;
      }
    >(`/exam-analysis-setting/${id}`);
  },
  /**
   * @description 更新指定的成绩分析设置，只有创建人可以修改自己的设置；exam_subject_ids 以请求为准覆盖保存
   */
  examAnalysisSettingUpdate: (id: number, request: ModelUpdateExamAnalysisSettingRequest) => {
    return httpClient.put<
      ControllerResponse & {
        /** 成绩分析设置响应结构 */
        data?: ModelExamAnalysisSettingResponse;
      }
    >(`/exam-analysis-setting/${id}`, { params: request });
  },
  /**
   * @description 删除指定的成绩分析设置，只有创建人可以删除自己的设置
   */
  examAnalysisSettingDelete: (id: number) => {
    return httpClient.delete<ControllerResponse>(`/exam-analysis-setting/${id}`);
  }
};
