/**
 * 表单处理逻辑 Mixin
 * 包含：表单重置、数据转换、表单填充等
 */
import { formatTime as formatTimeHelper } from '../utils/dateHelpers'
import { getStatusInfo } from '../utils/alertTransformers'

export default {
  methods: {
    /**
     * 格式化时间为 HH:mm（用于列表显示）
     */
    formatTime(dateTimeString) {
      return formatTimeHelper(dateTimeString)
    },
    /**
     * 将后端来源渠道代码映射到前端格式
     */
    mapBackendToFrontendChannel(backendCode) {
      const channelMap = {
        '122': 'phone_122',
        '12345': 'phone_12345',
        '110': 'phone_110',
        'superior': 'transfer',
        'subordinate': 'transfer',
        'other_dept': 'transfer',
        'monitor': 'monitoring',
        'media': 'media',
        'manual': 'other'
      }
      return channelMap[backendCode] || backendCode
    },
    
    /**
     * 获取渠道显示名称
     */
    getChannelDisplayName(sourceChannel) {
      const channelMap = {
        '122': '122',
        '12345': '12345',
        '110': '110',
        'superior': '上级转办',
        'subordinate': '下级上报',
        'other_dept': '其他部门转办',
        'monitor': '监测',
        'media': '媒体',
        'manual': '手工录入'
      }
      return channelMap[sourceChannel] || sourceChannel || '未知'
    },
    
    /**
     * 转换后端数据为前端格式（用于列表显示）
     */
    transformAlertData(alert) {
      // 使用统一的 getStatusInfo，传入完整的 alert 对象（后端已经包含了 transferRecord 和 convertRecord）
      const statusInfo = getStatusInfo(alert)
      return {
        id: alert.id,
        alertNo: alert.alertNo,
        status: statusInfo.label,
        statusTag: statusInfo.tag,
        summary: alert.summary || '',
        channel: this.getChannelDisplayName(alert.sourceChannel),
        time: formatTime(alert.occurredAt)
      }
    },
    
    /**
     * 填充表单数据（从后端数据转换为表单格式）
     */
    fillFormFromAlertData(alertData, formRef, mapRef) {
      if (!alertData) return
      
      // 填充表单数据
      const formData = {
        summary: alertData.summary || '',
        sourceChannel: this.mapBackendToFrontendChannel(alertData.sourceChannel),
        callerNumber: alertData.callerNumber || '',
        initialLevel: alertData.initialLevel,
        occurredAt: alertData.occurredAt || '',
        location: alertData.location || '',
        remark: alertData.remark || '',
        sourceExtInfo: {} // 初始化扩展信息对象
      }
      
      // 反序列化来源扩展信息（从 JSON 字符串转换为对象）
      if (alertData.sourceExtInfo) {
        try {
          const extInfo = typeof alertData.sourceExtInfo === 'string' 
            ? JSON.parse(alertData.sourceExtInfo) 
            : alertData.sourceExtInfo
          formData.sourceExtInfo = extInfo || {}
        } catch (error) {
          console.warn('解析来源扩展信息失败:', error)
          formData.sourceExtInfo = {}
        }
      }
      
      // 设置位置坐标（如果可用）
      let locationData = {
        longitude: null,
        latitude: null,
        selectedLocation: null,
        mapCenter: [120.1551, 30.2741],
        mapMarkers: []
      }
      
      if (alertData.longitude && alertData.latitude) {
        locationData.longitude = parseFloat(alertData.longitude)
        locationData.latitude = parseFloat(alertData.latitude)
        locationData.mapCenter = [locationData.longitude, locationData.latitude]
        locationData.mapMarkers = [{
          lat: locationData.latitude,
          lng: locationData.longitude,
          title: '发生地点',
          content: alertData.location
        }]
      }
      
      return {
        formData,
        locationData,
        editingAlertId: alertData.id,
        editingAlertStatus: alertData.status || 'draft'
      }
    },
    
    /**
     * 重置表单
     */
    resetFormData(formRef, locationDataRef) {
      // 重置表单字段
      if (formRef) {
        formRef.resetFields()
      }
      
      // 重置位置相关数据
      if (locationDataRef) {
        locationDataRef.longitude = null
        locationDataRef.latitude = null
        locationDataRef.selectedLocation = null
        locationDataRef.mapCenter = [120.1551, 30.2741]
        locationDataRef.mapMarkers = []
      }
      
      return {
        editingAlertId: null,
        editingAlertStatus: null
      }
    }
  }
}