/**
 * 警情数据转换工具函数
 * 用于将后端数据格式转换为前端显示格式
 */
import { formatTime } from './dateHelpers'

/**
 * 获取基础状态信息（原始逻辑）
 * @param {string} statusCode - 状态代码
 * @returns {object} { label: 状态标签, tag: 标签类型 }
 */
function getBasicStatusInfo(statusCode) {
  const statusMap = {
    'draft': { label: '草稿', tag: 'info' },
    'received': { label: '已接警', tag: 'primary' },
    'transferred': { label: '已转警', tag: 'warning' },
    'converted': { label: '已转事件', tag: 'success' },
    'closed': { label: '已关闭', tag: 'info' }
  }
  return statusMap[statusCode] || { label: statusCode || '未知', tag: 'info' }
}

/**
 * 获取状态信息（增强版，支持转警/转事件记录）
 * @param {string|object} statusCodeOrAlert - 状态代码或完整的 alert 对象
 * @returns {object} { label: 状态标签, tag: 标签类型 }
 */
export function getStatusInfo(statusCodeOrAlert) {
  // 向后兼容：如果传入的是字符串，使用基础状态
  if (typeof statusCodeOrAlert === 'string') {
    return getBasicStatusInfo(statusCodeOrAlert)
  }
  
  // 如果传入的是对象，使用增强逻辑
  const alert = statusCodeOrAlert
  const status = alert.status
  const transferRecord = alert.transferRecord
  const convertRecord = alert.convertRecord
  
  // 如果警情状态是 transferred 且有转警记录
  if (status === 'transferred' && transferRecord) {
    switch (transferRecord.status) {
      case 'pending_review':
        return { label: '转警待审核', tag: 'warning' }
      case 'pending_feedback':
        return { label: '转警待反馈', tag: 'info' }
      case 'feedback_received':
        return { label: '转警已反馈', tag: 'success' }
      case 'processed':
        return { label: '已转警', tag: 'warning' }
      case 'rejected':
        return { label: '已接警', tag: 'primary' } // 回退状态
      default:
        return { label: '已转警', tag: 'warning' }
    }
  }
  
  // 如果警情状态是 received 且有转事件记录
  if (status === 'received' && convertRecord) {
    switch (convertRecord.reviewStatus) {
      case 'pending':
        return { label: '转事件待审核', tag: 'warning' }
      case 'approved':
        return { label: '已转事件', tag: 'success' }
      case 'rejected':
        return { label: '已接警', tag: 'primary' } // 回退状态
      default:
        return { label: '已接警', tag: 'primary' }
    }
  }
  
  // 如果警情状态是 converted 且有转事件记录
  if (status === 'converted' && convertRecord) {
    if (convertRecord.reviewStatus === 'approved') {
      return { label: '已转事件', tag: 'success' }
    }
  }
  
  // 默认使用基础状态
  return getBasicStatusInfo(status)
}

/**
 * 获取渠道显示名称
 * @param {string} sourceChannel - 来源渠道代码
 * @returns {string} 渠道显示名称
 */
export function getChannelDisplayName(sourceChannel) {
  const channelMap = {
    '122': '122',
    '12345': '12345',
    '110': '110',
    'superior': '上级转办',
    'subordinate': '下级上报',
    'other_dept': '其他部门转办',
    'monitor': '监测',
    'media': '媒体',
    'manual': '手工录入'
  }
  return channelMap[sourceChannel] || sourceChannel || '未知'
}

/**
 * 转换后端数据为前端格式（用于列表显示）
 * @param {object} alert - 后端警情数据（现在包含 transferRecord 和 convertRecord）
 * @returns {object} 转换后的前端数据格式
 */
export function transformAlertData(alert) {
  // 使用增强的状态显示逻辑（传入完整的 alert 对象）
  const statusInfo = getStatusInfo(alert)
  
  return {
    id: alert.id,
    alertNo: alert.alertNo,
    status: statusInfo.label,
    statusTag: statusInfo.tag,
    summary: alert.summary || '',
    channel: getChannelDisplayName(alert.sourceChannel),
    time: formatTime(alert.occurredAt)
  }
}