import { ref, computed } from 'vue'

/**
 * 灾害数据状态管理
 */
export function useDisasterData() {
  // 灾害基本信息
  const disasterInfo = ref({
    type: '边坡垮塌',
    volume: '10022',
    volumeUnit: 'm³',
    length: '13',
    lengthUnit: 'm',
    width: '5',
    widthUnit: 'm',
    casualties: '0',
    vehicles: '0',
    location: '巴南G348武大线三峭湾'
  })

  // 力量预置信息
  const forcePreset = ref({
    equipment: 23,
    bases: 2,
    personnel: 2124,
    searchRadius: 30, // km
    stations: [
      {
        id: 1,
        name: '大进养护站',
        distance: 8,
        type: 'maintenance'
      },
      {
        id: 2,
        name: '郭家养护站',
        distance: 8,
        type: 'maintenance'
      }
    ]
  })

  // 力量调度信息
  const forceDispatch = ref({
    responseLevel: 3, // 三级
    estimatedClearTime: '2025/10/21 22:00',
    plan: {
      name: '智能应急方案',
      status: 'ready'
    }
  })

  // 协同信息
  const collaborationInfo = ref([
    {
      id: 1,
      source: '气象预警',
      content:
        '巫溪县气象台2025年10月17日12时30分升级发布"暴雨黄色预警信号"，过去6小时，文峰、红池坝、天元、长桂等乡镇累计降雨量已达70毫米以上。',
      timestamp: '2025-10-17 12:30'
    },
    {
      id: 2,
      source: '公安部门',
      content: '对巴南G348武大线三峭湾进行交通管制。',
      timestamp: '2025-10-17 13:00'
    },
    {
      id: 3,
      source: '融媒体中心',
      content:
        '发布了阻断信息：巴南G348武大线三湾于6月28日发生山体滑坡，边坡有继续垮塌风险，需断道观察，车辆从桥口坝绕行金田村，预计2025年10月17日18时30分恢复通行。',
      timestamp: '2025-10-17 14:30'
    }
  ])

  // 调度力量建议（根据力量预置数据动态计算）
  const dispatchSuggestion = computed(() => {
    // 根据实际资源计算建议调度力量
    const stationsCount = forcePreset.value.stations?.length || 0

    return {
      // 应急物资建议数：基于装备数量
      supplies: forcePreset.value.equipment,

      // 应急人员建议数：取总人员的一部分（约5-10%）作为调度建议
      personnel: Math.min(Math.ceil(forcePreset.value.personnel * 0.06), forcePreset.value.personnel),

      // 养护站建议数：使用实际可用养护站数量
      stations: stationsCount,

      // 挖掘机建议数：每2个养护站配置1台挖掘机
      excavators: Math.max(1, Math.ceil(stationsCount / 2)),

      // 阻断信息：固定建议
      blockInfo: '需发布',

      // 交通管制：固定建议
      trafficControl: '需要'
    }
  })

  // 计算属性
  const totalResources = computed(() => {
    return (
      forcePreset.value.equipment +
      forcePreset.value.bases +
      forcePreset.value.personnel
    )
  })

  /**
   * 更新搜索半径
   * @param {number} radius - 新的搜索半径(km)
   */
  const updateSearchRadius = (radius) => {
    if (typeof radius === 'number' && radius > 0) {
      forcePreset.value.searchRadius = radius
      console.log(`[useDisasterData] 搜索半径已更新为: ${radius}km`)
    } else {
      console.warn('[useDisasterData] 无效的搜索半径值:', radius)
    }
  }

  /**
   * 更新力量预置数据
   * @param {Object} emergencyResourcesData - 接口返回的应急资源数据
   * @param {number} emergencyResourcesData.equipmentCount - 应急装备数量
   * @param {number} emergencyResourcesData.personnelCount - 应急人员数量
   * @param {Array} emergencyResourcesData.stations - 养护站列表
   * @param {string} emergencyResourcesData.stations[].stationId - 养护站ID
   * @param {string} emergencyResourcesData.stations[].stationName - 养护站名称
   * @param {number} emergencyResourcesData.stations[].distance - 距离(km)
   */
  const updateForcePreset = (emergencyResourcesData) => {
    if (!emergencyResourcesData) {
      console.warn('[useDisasterData] 应急资源数据为空,跳过更新')
      return
    }

    const { equipmentCount, personnelCount, stations } = emergencyResourcesData

    // 更新装备和人员数量
    if (typeof equipmentCount === 'number') {
      forcePreset.value.equipment = equipmentCount
    }
    if (typeof personnelCount === 'number') {
      forcePreset.value.personnel = personnelCount
    }

    // 更新养护站列表
    if (Array.isArray(stations)) {
      forcePreset.value.stations = stations.map((station) => ({
        id: station.stationId,
        name: station.stationName?.trim() || '未命名养护站',
        distance: typeof station.distance === 'number'
          ? Number(station.distance.toFixed(2))
          : 0,
        type: 'maintenance'
      }))
    }

    console.log('[useDisasterData] 力量预置数据已更新:', forcePreset.value)
  }

  return {
    disasterInfo,
    forcePreset,
    forceDispatch,
    collaborationInfo,
    dispatchSuggestion,
    totalResources,
    updateForcePreset,
    updateSearchRadius
  }
}
