import { http } from "@/utils/http";
import type {
  CodeFeedbackInfo,
  CodeImportInfo,
  CodeInfo,
  QueryCodeLogInfo,
  QueryCodeResult
} from "types/code";
import { filterEmptyObject } from "./utils";

/**
 * 获取编码模版
 */
export const getCodeTemplateAPI = () => {
  return http.request<Blob>("get", "/api/code/template", {
    responseType: "blob" // 设置响应类型为 blob
  });
};

/**
 * 获取查询模版
 */
export const getQueryTemplateAPI = () => {
  return http.request<Blob>("get", "/api/code/queryTemplate", {
    responseType: "blob" // 设置响应类型为 blob
  });
};

/**
 * 导入编码
 */
export const getAddCodeAPI = (id: string) => {
  return http.request<null>("get", `/api/code/addCode/${id}`);
};

/**导入编码 */
export const postAddCodeAPI = (data: AddCodeParams) => {
  return http.request<null>("post", `/api/code/add`, {
    data
  });
};

/**删除编码 */
export const deleteCodeAPI = (id: string) => {
  return http.request<null>("delete", `/api/code/delete/${id}`);
};

/**
 * 批量删除编码
 */
export const deleteCodeListAPI = (data: { ids: string[] }) => {
  return http.request<null>("post", `/api/code/deleteList`, { data });
};

/**
 * 更新编码参数
 */
interface AddCodeParams {
  /**编码 */
  code: string;
  /** 编码描述 */
  description: string;
}

/**更新编码 */
export const putUpdateCodeAPI = (data: AddCodeParams, id: string) => {
  return http.request<null>("put", `/api/code/update/${id}`, {
    data
  });
};

/**获取编码详情 */
export const getCodeInfoAPI = (id: string) => {
  return http.request<CodeInfo>("get", `/api/code/info/${id}`);
};

/**
 * 获取编码列表参数
 */
interface GetCodeListParams {
  /** 当前页码 */
  page: number;
  /** 每页条数 */
  pageSize: number;
  /** 编码 */
  code?: string;
  /** 编码描述 */
  description?: string;
  /**用户账号 */
  username?: string;
  /**用户昵称 */
  nickname?: string;
  /**部门ID */
  department_id?: string;
  /**开始时间 */
  startTime?: string | number;
  /**结束时间 */
  endTime?: string | number;
}
/**
 * 获取编码列表
 * @param params
 * @returns
 */
export const getCodeListAPI = (params: GetCodeListParams) => {
  return http.request<QueryListResult<CodeInfo>>("get", "/api/code/list", {
    params: filterEmptyObject(params)
  });
};

/**查询编码 */
export const postCodeInfoAPI = (data: { query_text: string }) => {
  return http.request<QueryCodeResult>("post", `/api/code/query`, {
    data
  });
};

/**查询编码 */
export const getQueryCodeAPI = (id: string) => {
  return http.request<QueryCodeResult>("get", `/api/code/query/${id}`);
};

/**
 * 获取编码日志列表
 * @param params
 * @returns
 */
export const getCodeLogListAPI = (params: {
  page: number;
  pageSize: number;
  /**用户账号 */
  username?: string;
  /**用户昵称 */
  nickname?: string;
  /**部门ID */
  department_id?: string;
  /**开始时间 */
  startTime?: string | number;
  /**结束时间 */
  endTime?: string | number;
}) => {
  return http.request<QueryListResult<QueryCodeLogInfo>>(
    "get",
    `/api/code/logList`,
    {
      params: filterEmptyObject(params)
    }
  );
};

/**获取查询编码日志详情 */
export const getCodeLogInfoAPI = (id: string) => {
  return http.request<QueryCodeLogInfo>("get", `/api/code/logInfo/${id}`);
};

/**获取所有查询编码列表 */
export const getCodeLogListAllAPI = (params: {
  /**用户账号 */
  username?: string;
  /**用户昵称 */
  nickname?: string;
  /**部门ID */
  department_id?: string;
  /**登录状态 */
  status?: number | string;
  /**开始时间 */
  startTime?: string | number;
  /**结束时间 */
  endTime?: string | number;
}) => {
  return http.request<QueryListResult<QueryCodeLogInfo>>(
    "get",
    `/api/code/logList/all`,
    {
      params: filterEmptyObject(params)
    }
  );
};

/**删除编码导入 */
export const deleteCodeImportAPI = (id: string) => {
  return http.request<null>("delete", `/api/code/deleteCodeImport/${id}`);
};

/**批量删除编码导入 */
export const deleteCodeImportListAPI = (data: { ids: string[] }) => {
  return http.request<null>("post", `/api/code/deleteCodeImportList`, { data });
};

/**编码导入审核 */
export const putCodeImportAuditAPI = (data: {
  /**状态 */
  status: number;
  /**编码ID列表 */
  ids: string[];
}) => {
  return http.request<null>("put", `/api/code/codeImportAudit`, { data });
};

/**获取编码导入列表参数 */
interface GetCodeImportListParams {
  /** 当前页码 */
  page: number;
  /** 每页条数 */
  pageSize: number;
  /** 状态 */
  status?: number | string;
  /**编码 */
  code?: string;
  /**编码描述 */
  description?: string;
  /**用户账号 */
  username?: string;
  /**用户昵称 */
  nickname?: string;
  /**部门ID */
  department_id?: string;
  /**开始时间 */
  startTime?: string | number;
  /**结束时间 */
  endTime?: string | number;
}
/**
 * 获取编码导入列表
 * @param params
 * @returns
 */
export const getCodeImportListAPI = (params: GetCodeImportListParams) => {
  return http.request<QueryListResult<CodeImportInfo>>(
    "get",
    `/api/code/codeImportList`,
    {
      params: filterEmptyObject(params)
    }
  );
};

/**修改编码导入 */
export const putUpdateCodeImportAPI = (data: AddCodeParams, id: string) => {
  return http.request<null>("put", `/api/code/updateCodeImport/${id}`, {
    data
  });
};

/**添加反馈参数 */
interface AddCodeFeedbackParams {
  /**反馈编码 */
  feedback_code: string;
  /**反馈文本 */
  feedback_description: string;
  /**编码ID */
  code_id: string;
}

/**添加反馈 */
export const postAddCodeFeedbackAPI = (data: AddCodeFeedbackParams) => {
  return http.request<null>("post", `/api/code/addFeedback`, { data });
};

/**删除反馈 */
export const deleteCodeFeedbackAPI = (id: string) => {
  return http.request<null>("delete", `/api/code/deleteFeedback/${id}`);
};
/**批量删除反馈 */
export const deleteCodeFeedbackListAPI = (data: { ids: string[] }) => {
  return http.request<null>("post", `/api/code/deleteFeedbackList`, { data });
};

/**修改编码反馈 */
export const putUpdateCodeFeedbackAPI = (
  data: AddCodeFeedbackParams,
  id: string
) => {
  return http.request<null>("put", `/api/code/updateFeedback/${id}`, {
    data
  });
};

/**获取编码反馈列表参数 */
interface GetCodeFeedbackListParams {
  /** 当前页码 */
  page: number;
  /** 每页条数 */
  pageSize: number;
  /** 状态 */
  status?: number | string;
  /**编码 */
  code?: string;
  /**反馈编码 */
  feedback_code?: string;
  /**反馈文本 */
  feedback_description?: string;
  /**用户账号 */
  username?: string;
  /**用户昵称 */
  nickname?: string;
  /**部门ID */
  department_id?: string;
  /**开始时间 */
  startTime?: string | number;
  /**结束时间 */
  endTime?: string | number;
}

/**
 * 获取编码反馈列表
 * @param params
 * @returns
 */
export const getCodeFeedbackListAPI = (params: GetCodeFeedbackListParams) => {
  return http.request<QueryListResult<CodeFeedbackInfo>>(
    "get",
    `/api/code/feedbackList`,
    {
      params: filterEmptyObject(params)
    }
  );
};

/**反馈审核 */
export const putCodeFeedbackAuditAPI = (data: {
  /**状态 */
  status: number;
  /**反馈ID列表 */
  ids: string[];
}) => {
  return http.request<null>("put", `/api/code/feedbackAudit`, { data });
};
