import axios, { AxiosResponse } from 'axios';
import type {
  OptionItem,
  TaskListPageParam,
  TaskListPageRes,
  TaskItemDetail,
  TaskRuleUpdateParams,
  TaskTimeUpdateParams,
  TaskNoticeUpdateParams,
  OrderRecordListPageRes,
  OrderRecordListPageParam,
  StudentExportListPageRes,
} from './types/order';
import { AbleParams } from './types/common';

// 通用查询
// 通用查询-任务查询
export function taskQuery(): Promise<OptionItem[]> {
  return axios.post('/api/apply/task/list', {});
}
// 通用查询-教学点查询
export function teachingQuery(): Promise<OptionItem[]> {
  return axios.post('/api/apply/teaching/list', {});
}
// 通用查询-考点查询
export function agentQuery(teachingId: number): Promise<OptionItem[]> {
  return axios.post(
    '/api/apply/agent/list',
    {},
    { params: { id: teachingId } }
  );
}

// 预约任务管理
// 预约任务管理-查询
export function taskListPage(
  params: TaskListPageParam
): Promise<TaskListPageRes> {
  return axios.post('/api/admin/apply/task/page', {}, { params });
}
// 预约任务管理-详情
export function taskDetailInfo(id: number): Promise<TaskItemDetail> {
  return axios.post('/api/admin/apply/task/find', {}, { params: { id } });
}
// 预约任务管理-新增编辑规则
export function updateTaskRule(
  datas: TaskRuleUpdateParams
): Promise<{ id: number }> {
  return axios.post('/api/admin/apply/task/rule/save', datas);
}
// 预约任务管理-编辑时段
export function updateTaskTime(
  datas: TaskTimeUpdateParams
): Promise<{ id: number }> {
  return axios.post('/api/admin/apply/task/time/save', datas);
}
// 预约任务管理-编辑说明
export function updateTaskNotice(
  datas: TaskNoticeUpdateParams
): Promise<{ id: number }> {
  return axios.post('/api/admin/apply/task/notice/save', datas);
}
// 预约任务管理-启用禁用
export function ableTask(params: AbleParams): Promise<boolean> {
  return axios.post('/api/admin/apply/task/enable', {}, { params });
}

// 考生信息导入
// 考生信息导入分页
export function studentImportListPage(): Promise<StudentExportListPageRes> {
  return axios.post('/api/admin/std/page', {});
}
// 考生信息导入-导入模板下载
export function studentInfoTemplate(): Promise<AxiosResponse<Blob>> {
  return axios.get('/api/admin/std/import/template', {
    responseType: 'blob',
  });
}

// 预约名单
// 预约名单详情分页
export function orderRecordListPage(
  params: OrderRecordListPageParam
): Promise<OrderRecordListPageRes> {
  return axios.post('/api/apply/std/page', params);
}
// 预约名单详情-取消预约
export function orderRecordCancel(id: number): Promise<boolean> {
  return axios.post('/api/apply/std/cancel', {}, { params: { id } });
}
// 预约名单详情-一键自动分配
export function orderRecordAutoAssign(params: {
  taskId: number;
}): Promise<boolean> {
  return axios.post('/api/apply/std/auto/assign', {}, { params });
}
// 预约名单详情-导入模板下载
export function orderRecordTemplate(): Promise<AxiosResponse<Blob>> {
  return axios.post(
    '/api/apply/imp/template',
    {},
    {
      responseType: 'blob',
    }
  );
}
// 预约名单详情-打印签到表
export function orderRecordPrint(params: {
  teachingId?: number;
}): Promise<AxiosResponse<Blob>> {
  return axios.post(
    '/api/apply/std/auto/sign/in/print',
    {},
    {
      responseType: 'blob',
      params,
    }
  );
}
