import axiosInstance from '../../utils/axios';

// 管理员工作统计数量响应类型
export interface ManagerWorkCountVO {
  unreleasedCount?: number; // 未发布数量（待执行）
  runningCount?: number; // 运行中数量（进行中）
  completedCount?: number; // 已完成数量
  [key: string]: any;
}

// 工作流节点类型（从 WorkJob 导入，避免循环依赖）
export interface WorkflowWorkNodeDO {
  id?: number;
  workId?: number;
  uuid?: string;
  parentUuid?: string;
  childrenUuid?: string;
  nodeName?: string;
  type?: string;
  status?: string | number;
  approvalStatus?: string;
  workerUserName?: string;
  responsibleName?: string;
  responsible?: string;
  workTime?: string;
  taskStartTime?: string;
  initiationTime?: string;
  currentNodeName?: string;
  currentNode?: string;
  nodeId?: number;
  [key: string]: any;
}

// 管理员工作列表项类型
export interface ManagerWorkItemVO {
  id?: number;
  name?: string; // 作业名称
  orderNo?: string; // 订单号
  code?: string; // 编码
  type?: string; // 类型
  urgencyLevel?: string; // 紧急程度
  designId?: number; // 设计ID
  status?: string | number; // 状态
  initiatorName?: string; // 负责人
  initiator?: string; // 负责人
  workstationName?: string; // 工作站名称
  ticketName?: string; // 工单名称
  jobType?: string; // 作业类型
  progress?: number; // 进度
  createTime?: string; // 创建时间
  startTime?: string; // 开始时间
  endTime?: string; // 结束时间
  workflowWorkNodeDOList?: WorkflowWorkNodeDO[]; // 任务节点列表
  [key: string]: any;
}

// 管理员工作列表响应类型
export interface ManagerWorkListResponse {
  list?: ManagerWorkItemVO[];
  total?: number;
  [key: string]: any;
}

// 管理员每日工作统计响应类型
export interface ManagerDayWorkCountVO {
  day?: string; // 日期（接口返回的字段名是 day）
  date?: string; // 日期（兼容字段）
  completedCount?: number; // 完成数量（接口返回的字段名是 completedCount）
  count?: number; // 数量（兼容字段）
  [key: string]: any;
}

// 管理员首页 API
export const managerHomeApi = {
  // 获取管理员工作统计数量
  getManagerWorkCount: async (): Promise<ManagerWorkCountVO> => {
    const response = await axiosInstance.get<ManagerWorkCountVO>('/iscs/manager-home/getManagerWorkCount');
    return response;
  },

  // 获取管理员工作列表
  getManagerWorkList: async (params?: {
    pageNo?: number;
    pageSize?: number;
    [key: string]: any;
  }): Promise<ManagerWorkItemVO[]> => {
    const response = await axiosInstance.get<{code: number; data: ManagerWorkItemVO[]; msg: string}>('/iscs/manager-home/getManagerWorkList', {
      params,
    });
    // axios 拦截器已经处理了响应，返回的 response 直接就是 data 数组
    // 但如果接口返回的是 {code, data, msg} 格式，需要从 data 中提取
    if (response && typeof response === 'object' && 'data' in response && Array.isArray(response.data)) {
      return response.data;
    }
    // 如果已经是数组，直接返回
    if (Array.isArray(response)) {
      return response;
    }
    return [];
  },

  // 获取管理员每日工作统计
  getManagerDayWorkCount: async (params?: {
    startDate?: string;
    endDate?: string;
    [key: string]: any;
  }): Promise<ManagerDayWorkCountVO[]> => {
    const response = await axiosInstance.get<{code: number; data: ManagerDayWorkCountVO[]; msg: string}>('/iscs/manager-home/getManagerDayWorkCount', {
      params,
    });
    // axios 拦截器已经处理了响应，返回的 response 直接就是 data 数组
    // 但如果接口返回的是 {code, data, msg} 格式，需要从 data 中提取
    if (response && typeof response === 'object' && 'data' in response && Array.isArray(response.data)) {
      return response.data;
    }
    // 如果已经是数组，直接返回
    if (Array.isArray(response)) {
      return response;
    }
    return [];
  },
};
