import { http } from '@/utils/http/axios';
import type { QueryPageRequest, QueryPageResponse } from '@/types/basic-query';

/**
 * ==================== 员工上报隐患管理 employeeHazardReport ====================
 */

// 员工上报隐患数据对象（详情 / 列表返回）
export interface EmployeeHazardReportDTO {
  id: number;
  hazardNo: string; // 隐患编号
  categoryId: number; // 隐患类别 ID
  categoryName: string; // 隐患类别名称
  hazardDesc: string; // 隐患问题描述
  location: string; // 隐患地点
  reportTime: string; // 上报时间
  sourceType: number; // 提交类型：1-员工，2-供应商，3-第三方
  sourceTypeName: string; // 提交类型名称
  taskSource: string; // 任务来源
  reporterName: string; // 上报人姓名
  reporterJobNo: string; // 上报人工号
  reporterMobile: string; // 联系电话
  attachment: string; // 附件 JSON
  status: number; // 状态：1-待审核，2-需求部门通过，3-需求部门驳回，4-安全部门通过，5-安全部门驳回，6-已入账，7-已关闭
  statusName: string; // 状态名称
  statusType?: number; // 状态类型：1-待审核，2-审核通过，3-审核不通过
  canApprove?: boolean; // 可审核
  canAccount?: boolean; // 可入账
  canView?: boolean; // 可查看
  isRewardApplied?: number; // 是否申请奖品：1-是，0-否
  createdById?: number; // 创建人 ID
  createdByName?: string; // 创建人姓名
  createdAt: string; // 创建时间
  updatedAt: string; // 更新时间
}

// 新增员工上报隐患
export interface SaveEmployeeHazardReportReq {
  categoryId: number; // 隐患类别 ID
  hazardDesc: string; // 隐患问题描述
  location: string; // 隐患地点
  reportTime: string; // 上报时间
  sourceType: number; // 提交类型：1-员工，2-供应商，3-第三方
  taskSource: string; // 任务来源
  reporterName: string; // 上报人姓名
  reporterJobNo: string; // 上报人工号
  reporterMobile: string; // 联系电话
  attachment?: string; // 附件 JSON，格式 [{file_name, url}]
}

// 编辑员工上报隐患
export interface UpdateEmployeeHazardReportReq {
  id: number; // 主键 ID
  categoryId?: number; // 隐患类别 ID
  hazardDesc?: string; // 隐患问题描述
  location?: string; // 隐患地点
  reportTime?: string; // 上报时间
  sourceType?: number; // 提交类型：1-员工，2-供应商，3-第三方
  taskSource?: string; // 任务来源
  reporterName?: string; // 上报人姓名
  reporterJobNo?: string; // 上报人工号
  reporterMobile?: string; // 联系电话
  attachment?: string; // 附件 JSON
}

// 查询条件
export interface QueryEmployeeHazardReportReq {
  keyword?: string; // 搜索隐患问题（支持全部非格式化字段关键词：隐患问题描述、隐患地点、姓名、工号、联系电话）
  statusType?: number; // 隐患状态下拉：0或null=全部，1=待审核，2=审核通过，3=审核不通过
  status?: number; // 状态精确值（1~7），与 statusType 二选一
  sourceTypeName?: string; // 搜索任务来源（模糊查询）
  startDate?: string; // 上报时间范围-开始日期（格式：YYYY-MM-DD）
  endDate?: string; // 上报时间范围-结束日期（格式：YYYY-MM-DD）
  categoryId?: number; // 隐患类别 ID
  reporterJobNo?: string; // 上报人工号
  hazardDesc?: string; // 仅按隐患问题描述查询（兼容用，建议使用 keyword）
}

// 审核员工上报隐患
export interface ApproveEmployeeHazardReportReq {
  hazardId: number; // 隐患主表 ID
  node: number; // 审批节点：1-需求部门，2-安全部门
  approvalStatus: number; // 审批状态：2-通过，3-驳回
  approvalContent?: string; // 审批意见
}

// 兼容旧接口名称（向后兼容）
export type HiddenDanger = EmployeeHazardReportDTO;
export type SaveHiddenDangerReq = SaveEmployeeHazardReportReq;
export type UpdateHiddenDangerReq = UpdateEmployeeHazardReportReq;
export type QueryHiddenDangerReq = QueryEmployeeHazardReportReq;

// 新增员工上报隐患
export function saveEmployeeHazardReport(data: SaveEmployeeHazardReportReq) {
  return http.request<number>({
    url: '/employeeHazardReport/saveEmployeeHazardReport',
    method: 'post',
    data,
  });
}

// 编辑员工上报隐患
export function updateEmployeeHazardReport(data: UpdateEmployeeHazardReportReq) {
  return http.request({
    url: '/employeeHazardReport/updateEmployeeHazardReport',
    method: 'put',
    data,
  });
}

// 删除员工上报隐患
export function deleteEmployeeHazardReport(id: number) {
  return http.request({
    url: `/employeeHazardReport/deleteEmployeeHazardReport?id=${id}`,
    method: 'delete',
  });
}

// 根据 ID 查询员工上报隐患详情
export function queryEmployeeHazardReportById(id: number) {
  return http.request<EmployeeHazardReportDTO>({
    url: `/employeeHazardReport/queryEmployeeHazardReportById?id=${id}`,
    method: 'get',
  });
}

// 查看员工上报隐患列表（不分页）
export function queryEmployeeHazardReportList(params?: QueryEmployeeHazardReportReq) {
  return http.request<EmployeeHazardReportDTO[]>({
    url: '/employeeHazardReport/queryEmployeeHazardReportList',
    method: 'post',
    data: params || {},
  });
}

// 分页查询员工上报隐患
export function queryEmployeeHazardReportPage(query: QueryPageRequest<QueryEmployeeHazardReportReq>) {
  return http.request<QueryPageResponse<EmployeeHazardReportDTO>>({
    url: '/employeeHazardReport/queryEmployeeHazardReportPage',
    method: 'post',
    data: query,
  });
}

// 分页查询员工上报隐患（管理员审核列表）
export function queryEmployeeHazardReportPendingPage(query: QueryPageRequest<QueryEmployeeHazardReportReq>) {
  return http.request<QueryPageResponse<EmployeeHazardReportDTO>>({
    url: '/employeeHazardReport/queryEmployeeHazardReportPendingPage',
    method: 'post',
    data: query,
  });
}

// 审核员工上报隐患
export function approveEmployeeHazardReport(data: ApproveEmployeeHazardReportReq) {
  return http.request({
    url: '/employeeHazardReport/approveEmployeeHazardReport',
    method: 'post',
    data,
  });
}

// 入账员工上报隐患
export function accountEmployeeHazardReport(hazardId: number) {
  return http.request({
    url: `/employeeHazardReport/accountEmployeeHazardReport`,
    method: 'post',
    data: {
      hazardId,
    },
  });
}

// 导出员工上报隐患
export function exportEmployeeHazardReport(params?: QueryEmployeeHazardReportReq) {
  return http.request(
    {
      url: '/employeeHazardReport/exportEmployeeHazardReport',
      method: 'post',
      data: params || {},
      responseType: 'blob',
    },
    {
      isTransformResponse: false,
    },
  );
}

// 导入结果
export interface ImportRes {
  successCount: number;
  failCount: number;
  failInfoList?: Array<{
    rowNum: number;
    failReason: string;
  }>;
  failMessages?: string[]; // 兼容旧版本
}

// 向后兼容的接口函数（使用旧接口名称）
export const saveHiddenDanger = saveEmployeeHazardReport;
export const updateHiddenDanger = updateEmployeeHazardReport;
export const deleteHiddenDanger = deleteEmployeeHazardReport;
export const queryHiddenDangerById = queryEmployeeHazardReportById;
export const queryHiddenDangerList = queryEmployeeHazardReportList;
export const queryHiddenDangerPage = queryEmployeeHazardReportPage;
export const exportHiddenDanger = exportEmployeeHazardReport;

/**
 * ==================== 隐患类别管理 hazardCategory ====================
 */

export interface HazardCategoryDTO {
  id: number;
  categoryName: string; // 类别名称
  description: string; // 类别描述
  status: number; // 状态：1-启用，0-禁用
  parentId: number; // 父级 ID，一级为 0
  sortOrder: number; // 排序
  createdAt: string; // 创建时间
  updatedAt: string; // 更新时间
}

export interface SaveHazardCategoryReq {
  categoryName: string; // 类别名称
  description?: string; // 类别描述，最多 300 字
  status: number; // 启用状态：1-启用，0-禁用
}

export interface UpdateHazardCategoryReq {
  id: number; // 主键 ID
  categoryName?: string; // 类别名称
  description?: string; // 类别描述，最多 300 字
  status?: number; // 启用状态：1-启用，0-禁用
}

export interface QueryHazardCategoryReq {
  keyword?: string; // 关键词，模糊查询类别名称、描述等
  status?: number; // 状态：1-启用，0-禁用
  startDate?: string; // 创建时间范围-开始
  endDate?: string; // 创建时间范围-结束
}

// 兼容旧接口名称（向后兼容）
export type DangerType = HazardCategoryDTO;
export type SaveDangerTypeReq = SaveHazardCategoryReq;
export type UpdateDangerTypeReq = UpdateHazardCategoryReq;
export type QueryDangerTypeReq = QueryHazardCategoryReq;

// 新增隐患类别
export function saveHazardCategory(data: SaveHazardCategoryReq) {
  return http.request<number>({
    url: '/hazardCategory/saveHazardCategory',
    method: 'post',
    data,
  });
}

// 编辑隐患类别
export function updateHazardCategory(data: UpdateHazardCategoryReq) {
  return http.request({
    url: '/hazardCategory/updateHazardCategory',
    method: 'put',
    data,
  });
}

// 删除隐患类别
export function deleteHazardCategory(id: number) {
  return http.request({
    url: `/hazardCategory/deleteHazardCategory?id=${id}`,
    method: 'delete',
  });
}

// 根据 ID 查询隐患类别详情
export function queryHazardCategoryById(id: number) {
  return http.request<HazardCategoryDTO>({
    url: `/hazardCategory/queryHazardCategoryById?id=${id}`,
    method: 'get',
  });
}

// 查看隐患类别列表（不分页）
export function queryHazardCategoryList(params?: QueryHazardCategoryReq) {
  return http.request<HazardCategoryDTO[]>({
    url: '/hazardCategory/queryHazardCategoryList',
    method: 'post',
    data: params || {},
  });
}

// 分页查询隐患类别
export function queryHazardCategoryPage(query: QueryPageRequest<QueryHazardCategoryReq>) {
  return http.request<QueryPageResponse<HazardCategoryDTO>>({
    url: '/hazardCategory/queryHazardCategoryPage',
    method: 'post',
    data: query,
  });
}

// 导出隐患类别
export function exportHazardCategory(params?: QueryHazardCategoryReq) {
  return http.request(
    {
      url: '/hazardCategory/exportHazardCategory',
      method: 'post',
      data: params || {},
      responseType: 'blob',
    },
    {
      isTransformResponse: false,
    },
  );
}

// 导入隐患类别
export function importHazardCategory(file: File) {
  const formData = new FormData();
  formData.append('file', file);
  return http.request<ImportRes>({
    url: '/hazardCategory/importHazardCategory',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data',
    },
  });
}

// 向后兼容的接口函数（使用旧接口名称）
export const saveDangerType = saveHazardCategory;
export const updateDangerType = updateHazardCategory;
export const deleteDangerType = deleteHazardCategory;
export const queryDangerTypeById = queryHazardCategoryById;
export const queryDangerTypeList = queryHazardCategoryList;
export const queryDangerTypePage = queryHazardCategoryPage;
export const exportDangerType = exportHazardCategory;
export const importDangerType = importHazardCategory;
