// src/utils/useHCesiumViewerClsGroundStation.ts

import type { MaybeRefOrGetter } from 'vue';

import type { HCesiumManager } from './managers/HCesiumManager'; // 导入新的 Viewer Manager
import type { I站点 } from './managers/HCesiumManager.types';
import type { HCesiumManagerStationState } from './useHCesiumManager.types'; // 从顶层类型文件导入

import { HCesiumStationManager } from './managers/HCesiumManager.站点'; // 导入 GroundStation Manager

/**
 * 管理 Cesium Viewer 中的地面站实体，根据选中的 ID 列表进行同步。
 */
export function useHCesiumManagerStation(
  hCesiumViewerManager: MaybeRefOrGetter<HCesiumManager>,
  state: MaybeRefOrGetter<HCesiumManagerStationState | undefined>, // 传递整个状态对象
) {
  const stationManager = ref<HCesiumStationManager | null>(null);

  // 创建一个从 ID 到站点选项的映射，方便查找
  const stationMap = computed(() => {
    const map = new Map<string, I站点>();
    const list = toValue(state)?.stations ?? []; // 从状态对象获取列表
    for (const station of list) {
      map.set(station.id, station);
    }
    return map;
  });

  // 使用 watchEffect 自动追踪依赖项
  watchEffect(() => {
    console.group(`[useHCesiumManager.站点] 同步数据到Cesium...`);
    const viewerManagerInstance = toValue(hCesiumViewerManager);

    // 检查 Viewer Manager 和内部 Viewer 实例是否存在
    if (!viewerManagerInstance || !viewerManagerInstance.getViewer()) {
      // 如果 viewer manager 或 viewer 实例尚未初始化或已销毁，则清理旧 manager 并返回
      stationManager.value?.destroy();
      stationManager.value = null;
      console.debug(`Viewer 实例未初始化。`);
      console.groupEnd();
      return;
    }
    console.debug(`同步前 Viewer 实体数量: ${viewerManagerInstance?.getViewer()?.entities.values.length}`);

    if (!stationManager.value) {
      stationManager.value = new HCesiumStationManager(viewerManagerInstance);
    }

    const manager = stationManager.value; // 使用 manager 实例

    const selectedIdsSet = toValue(state)?.selectedIds ?? new Set<string>(); // 从状态对象获取选中 ID
    const currentEntityIds = new Set(manager.getCurrentStationEntities().keys()); // 从 manager 获取当前实体 ID

    // 1. 移除不再选中的站点
    for (const entityId of currentEntityIds) {
      if (!selectedIdsSet.has(entityId)) {
        manager.removeStation(entityId); // 使用 manager 的移除方法
      }
    }

    // 2. 添加新增的选中站点
    for (const selectedId of selectedIdsSet) {
      if (!currentEntityIds.has(selectedId)) {
        const stationToAdd = stationMap.value.get(selectedId);
        if (stationToAdd) {
          manager.addOrUpdateStation(stationToAdd); // 使用 manager 的添加/更新方法
        } else {
          // 如果在 groundStationList 中找不到对应的站点信息，发出警告
          console.warn(`无法找到 ID 为 "${selectedId}" 的站点信息，无法添加到地图。`);
        }
      }
    }
    console.groupEnd();
  }); // watchEffect 结束

  // 组件卸载时确保最终清理
  onBeforeUnmount(() => {
    stationManager.value?.destroy();
    stationManager.value = null; // 明确置空
  });

  // 返回 stationMap 可能在某些场景下有用，例如调试或扩展
  return {
    stationMap,
  };
}
