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

// 执行者节点统计数量响应类型
export interface ExecutorNodeCountVO {
  unreleasedCount?: number; // 待执行数量
  runningCount?: number; // 进行中数量
  completedCount?: number; // 已完成数量
  [key: string]: any;
}

// 执行者节点类型
export interface ExecutorNodeVO {
  id?: number;
  workId?: number;
  uuid?: string;
  parentUuid?: string;
  childrenUuid?: string;
  nodeName?: string; // 节点名称
  nodeIcon?: string;
  type?: number;
  position?: string;
  data?: string;
  description?: string; // 描述
  workerUserId?: number;
  workerGroupId?: number;
  formId?: number;
  formData?: string;
  smsTemplateCode?: number;
  messageTemplateCode?: number;
  emailTemplateCode?: number;
  appTemplateCode?: number;
  approvalStatus?: number | string; // 审批状态：1-待执行，2-进行中，3-已完成等，或字符串如 "running"
  approvalOpinion?: string;
  isolationType?: number;
  isolationPoints?: string;
  isolationNodeUuid?: string;
  notifyUserId?: number;
  notifyUserGroupId?: number;
  notifyTime?: string;
  notifyConfig?: string;
  specialConfig?: string;
  startTime?: string; // 开始时间
  endTime?: string;
  createTime?: string;
  workTime?: number | string; // 工作时间（时间戳或字符串）
  nodeId?: number | string; // 节点ID
  currentNodeId?: number | string; // 当前节点ID
  currentNodeName?: string; // 当前节点名称
  name?: string; // 作业名称
  cancellationReason?: string | null; // 取消原因
  cancellationTime?: string | number | null; // 取消时间
  completionTime?: string | number | null; // 完成时间
  nodeUserList?: Array<{
    id?: number;
    workNodeId?: number;
    type?: number;
    userId?: number;
    userGroupId?: number;
    createTime?: string;
    username?: string | number;
    nickname?: string | number;
    mobile?: string | number;
    avatar?: string | number;
  }>;
  workerUserName?: string | number; // 负责人
  initiatorName?: string | number; // 发起人
  // 兼容字段，用于表格显示
  orderNo?: string; // 作业编号（可以从 workId 或其他字段映射）
  name?: string; // 任务名称（映射自 nodeName）
  currentNodeName?: string; // 当前节点名称（映射自 nodeName）
  taskStatus?: string | number; // 任务状态（映射自 approvalStatus）
  status?: string | number; // 状态（映射自 approvalStatus）
  workTime?: string; // 工作时间（映射自 startTime）
  taskStartTime?: string; // 任务开始时间（映射自 startTime）
  urgencyLevel?: string | number; // 紧急程度
  workType?: string | number; // 作业类型
  [key: string]: any;
}

// 每日完成节点统计响应类型
export interface ExecutorDayCompletedVO {
  day?: string; // 日期
  completedCount?: number; // 完成数量
  [key: string]: any;
}

// 执行者首页 API
export const executorHomeApi = {
  // 获取执行者节点统计数量
  getExecutorNodeCount: async (): Promise<ExecutorNodeCountVO> => {
    const response = await axiosInstance.get<{code: number; data: ExecutorNodeCountVO; msg: string}>('/iscs/executor-home/getExecutorNodeCount');
    // axios 拦截器已经处理了响应，返回的 response 直接就是 data
    // 但如果接口返回的是 {code, data, msg} 格式，需要从 data 中提取
    if (response && typeof response === 'object' && 'data' in response) {
      return response.data;
    }
    return response as ExecutorNodeCountVO;
  },

  // 获取我的已完成节点列表（用于趋势图）
  getMyCompletedNodeList: async (params?: {
    startDate?: string;
    endDate?: string;
    [key: string]: any;
  }): Promise<ExecutorDayCompletedVO[]> => {
    const response = await axiosInstance.get<{code: number; data: ExecutorDayCompletedVO[]; msg: string}>('/iscs/executor-home/getMyCompletedNodeList', {
      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 [];
  },

  // 获取我的节点列表（任务列表）
  getMyNodeList: async (params?: {
    pageNo?: number;
    pageSize?: number;
    [key: string]: any;
  }): Promise<ExecutorNodeVO[]> => {
    const response = await axiosInstance.get<{code: number; data: ExecutorNodeVO[]; msg: string}>('/iscs/executor-home/getMyNodeList', {
      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 [];
  },
};
