import httpClient from '@/utils/http';

import {
  ControllerResponse,
  ModelChangeTeacherPasswordRequest,
  ModelCreateTeacherRequest,
  ModelDeleteTeacherRequest,
  ModelSetTeacherAdminRequest,
  ModelTeacher,
  ModelUpdateTeacherRequest
} from './data-contracts';
export default {
  /**
   * @description 创建新的教师（手机号作为用户名，默认密码111111，自动关联调用人的学校）
   */
  teachersCreate: (teacher: ModelCreateTeacherRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 教师信息模型 */
        data?: ModelTeacher;
      }
    >(`/teachers`, { params: teacher });
  },
  /**
   * @description 获取所有教师的列表信息（分页和筛选），根据用户角色自动过滤学校
   */
  teachersList: (query: {
    /**
     * 页码
     * @default 1
     */
    page?: number;
    /**
     * 每页数量
     * @default 10
     */
    page_size?: number;
    /**
     * 年级ID筛选
     * @example 1
     */
    grade?: number;
    /**
     * 班级ID筛选
     * @example 1
     */
    class?: number;
    /**
     * 角色ID筛选
     * @example 1
     */
    role?: number;
    /**
     * 学科ID筛选
     * @example 1
     */
    subject?: number;
    /**
     * 关键词搜索（姓名、手机号）
     * @example ""张老师""
     */
    keyword?: string;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: {
          list?: ModelTeacher[];
          page?: number;
          page_size?: number;
          total?: number;
        };
      }
    >(`/teachers`, { query: query });
  },
  /**
   * @description 通过Excel文件批量导入教师信息，支持新增和更新操作。如果教师手机号已存在则更新，否则新增
   */
  batchImportCreate: (data: any) => {
    return httpClient.formData<
      ControllerResponse & {
        data?: {
          errors?: string[];
          fail_count?: number;
          new_count?: number;
          update_count?: number;
        };
      }
    >(`/teachers/batch-import`, { params: data });
  },
  /**
   * @description 根据请求体参数删除教师（软删除）
   */
  deleteDelete: (req: ModelDeleteTeacherRequest) => {
    return httpClient.delete<
      ControllerResponse & {
        message?: string;
      }
    >(`/teachers/delete`, { params: req });
  },
  /**
   * @description 根据筛选条件导出教师列表到Excel文件，使用与列表接口相同的查询参数
   */
  exportList: (query: {
    /**
     * 页码（导出时忽略）
     * @default 1
     */
    page?: number;
    /**
     * 每页数量（导出时忽略）
     * @default 10
     */
    page_size?: number;
    /**
     * 年级ID筛选
     * @example 1
     */
    grade?: number;
    /**
     * 班级ID筛选
     * @example 1
     */
    class?: number;
    /**
     * 角色ID筛选
     * @example 1
     */
    role?: number;
    /**
     * 学科ID筛选
     * @example 1
     */
    subject?: number;
    /**
     * 关键词搜索（姓名、手机号）
     * @example ""张老师""
     */
    keyword?: string;
  }) => {
    return httpClient.download<Blob>(`/teachers/export`, { query: query });
  },
  /**
   * @description 设置或取消指定教师的管理员权限
   */
  setAdminCreate: (request: ModelSetTeacherAdminRequest) => {
    return httpClient.post<
      ControllerResponse & {
        Message?: string;
      }
    >(`/teachers/set-admin`, { params: request });
  },
  /**
   * @description 下载教师批量导入的Excel模板文件
   */
  templateDownloadList: () => {
    return httpClient.download<Blob>(`/teachers/template/download`);
  },
  /**
   * @description 根据教师ID获取特定教师的详细信息
   */
  teachersDetail: (id: number) => {
    return httpClient.get<
      ControllerResponse & {
        /** 教师信息模型 */
        data?: ModelTeacher;
      }
    >(`/teachers/${id}`);
  },
  /**
   * @description 根据ID更新教师信息
   */
  teachersUpdate: (id: number, teacher: ModelUpdateTeacherRequest) => {
    return httpClient.put<
      ControllerResponse & {
        /** 教师信息模型 */
        data?: ModelTeacher;
      }
    >(`/teachers/${id}`, { params: teacher });
  },
  /**
   * @description 修改教师密码（无需验证旧密码）
   */
  passwordUpdate: (id: number, req: ModelChangeTeacherPasswordRequest) => {
    return httpClient.put<
      ControllerResponse & {
        message?: string;
      }
    >(`/teachers/${id}/password`, { params: req });
  }
};
