// ========== 工单业务公共字典 ==========
// 数据源：/api/work-order/* (BusinessWorkOrderController)

// 工单类型：1-故障维修 2-日常巡检 3-设备保养
export const ORDER_TYPE_MAP = {
  1: { text: '故障维修', type: 'danger' },
  2: { text: '日常巡检', type: 'primary' },
  3: { text: '设备保养', type: 'warning' }
}

// 工单优先级：1-紧急 2-一般 3-低
export const ORDER_LEVEL_MAP = {
  1: { text: '紧急', type: 'danger' },
  2: { text: '一般', type: 'warning' },
  3: { text: '低', type: 'info' }
}

// 工单状态：1-待派单 2-待接单 3-已接单 4-处理中 5-待验收 6-已结案 7-已驳回 8-延期审核 9-已延期
export const ORDER_STATUS_MAP = {
  1: { text: '待派单', type: 'danger' },
  2: { text: '待接单', type: 'warning' },
  3: { text: '已接单', type: 'primary' },
  4: { text: '处理中', type: 'warning' },
  5: { text: '待验收', type: 'primary' },
  6: { text: '已结案', type: 'success' },
  7: { text: '已驳回', type: 'info' },
  8: { text: '延期审核', type: 'warning' },
  9: { text: '已延期', type: 'warning' }
}

// 业务简化为三态分组（统计卡用）
export const ORDER_STATUS_GROUP = {
  pending: [1, 2, 3],       // 待处理：待派单/待接单/已接单
  processing: [4, 8, 9],    // 处理中：处理中/延期审核/已延期
  completed: [5, 6],        // 已完成：待验收/已结案
  rejected: [7]             // 已驳回
}

// 工单操作日志类型（后端 WorkOrderLog.operType 数字枚举）
export const ORDER_LOG_TYPE_MAP = {
  1: { text: '创建工单', type: 'primary' },
  2: { text: '派单', type: 'warning' },
  3: { text: '接单', type: 'success' },
  4: { text: '开始维修', type: 'warning' },
  5: { text: '提交验收', type: 'primary' },
  6: { text: '验收通过', type: 'success' },
  7: { text: '驳回工单', type: 'info' },
  8: { text: '申请延期', type: 'warning' },
  9: { text: '延期通过', type: 'warning' }
}

// ========== 辅助函数 ==========

/** 工单状态文本 */
export function orderStatusText(status) {
  return ORDER_STATUS_MAP[status]?.text || '未知'
}

/** 工单状态 Tag type */
export function orderStatusType(status) {
  return ORDER_STATUS_MAP[status]?.type || 'info'
}

/** 工单类型文本 */
export function orderTypeText(type) {
  return ORDER_TYPE_MAP[type]?.text || '未知'
}

/** 工单类型 Tag type */
export function orderTypeTagType(type) {
  return ORDER_TYPE_MAP[type]?.type || 'info'
}

/** 优先级文本 */
export function orderLevelText(level) {
  return ORDER_LEVEL_MAP[level]?.text || '-'
}

/** 优先级 Tag type */
export function orderLevelType(level) {
  return ORDER_LEVEL_MAP[level]?.type || 'info'
}

/** 是否属于某状态分组 */
export function inStatusGroup(order, groupName) {
  const list = ORDER_STATUS_GROUP[groupName] || []
  return list.includes(Number(order?.orderStatus))
}

/** 是否允许该操作（状态机与后端 BusinessWorkOrderServiceImpl 对齐）
 * 流程：1待派单 →2待接单 →3已接单 →4处理中 →5待验收 →6已结案
 * 动作：派单(1) → 核查(2/3) → 处理(3/4) → 提交验收(4) → 验收通过(5)；任意非终态可取消(→7)
 */
export const canOperate = {
  /** 待派单可派单 */
  dispatch: (o) => Number(o?.orderStatus) === 1,
  /** 待接单/已接单可核查 */
  verify: (o) => [2, 3].includes(Number(o?.orderStatus)),
  /** 已接单/处理中可处理 */
  process: (o) => [3, 4].includes(Number(o?.orderStatus)),
  /** 处理中可提交验收 */
  complete: (o) => Number(o?.orderStatus) === 4,
  /** 待验收可验收通过/结案 */
  close: (o) => Number(o?.orderStatus) === 5,
  /** 可取消：未结案/未驳回 */
  cancel: (o) => ![6, 7].includes(Number(o?.orderStatus))
}

/** 工单操作日志文本 */
export function orderLogText(type) {
  return ORDER_LOG_TYPE_MAP[type]?.text || type || '操作'
}

/** 工单操作日志 Tag type */
export function orderLogType(type) {
  return ORDER_LOG_TYPE_MAP[type]?.type || 'info'
}

/** 时间兜底显示 */
export function timeText(t) {
  return t || '-'
}
