/**
 * 地图内核工厂函数
 *
 * 设计模式：工厂模式（Factory Pattern）
 *
 * 作用：
 * 1. 根据全局配置（MAP_ENGINE）创建对应的地图适配器实例
 * 2. 封装适配器创建逻辑，统一管理不同地图内核的实例化
 * 3. 便于扩展新的地图内核，只需在此添加判断逻辑
 *
 * 使用场景：
 * - mapService 初始化时调用，创建对应的适配器实例
 * - 确保整个应用使用统一的地图引擎
 *
 * @module mapKernelFactory
 */

import AMapAdapter from '@vue2-client/base-client/components/common/AfMap/map/AMapAdapter'
import OLAdapter from '@vue2-client/base-client/components/common/AfMap/map/OLAdapter'

/**
 * 创建地图适配器实例
 *
 * 根据 mapConfig.js 中的 MAP_ENGINE 配置，返回对应的适配器实例：
 * - 'AMAP': 返回高德地图适配器（AMapAdapter）
 * - 'OPENLAYERS': 返回 OpenLayers 适配器（OLAdapter）
 *
 * @returns {MapAdapter} 地图适配器实例
 * @throws {Error} 当 MAP_ENGINE 配置值不合法时抛出错误
 *
 * @example
 * const adapter = createMapAdapter()
 * await adapter.initMap(container, options)
 */
export function createMapAdapter (engine = 'OPENLAYERS') {
  if (engine === 'AMAP') {
    return new AMapAdapter()
  }
  if (engine === 'OPENLAYERS') {
    return new OLAdapter()
  }
  throw new Error(`Unknown MAP_ENGINE: ${engine}. Expected 'AMAP' or 'OPENLAYERS'.`)
}
