import { guid } from '../../utils/CommonUtils';
/**
 * 管理地图对象
 * @module CesiumManager
 * @category map
 */
let mainMapId;
const maps = new Map();
const layers = new Map();
/**
 * @function CesiumManager.addMap
 * @description 向MapManager内加入地图对象，第一个加入的地图将视为主地图对象
 * @param {CesiumMapType} map - 地图对象
 * @param {string | number} mapId - 地图对象标识ID
 * @return {CesiumMapType} map
 */
function addMap(map, mapId) {
    const id = mapId || guid();
    map.uid = id;
    map.instanceType = 'Cesium';
    if (!mainMapId) {
        mainMapId = id;
    }
    if (maps.has(id)) {
        return {
            map: maps.get(id),
            message: `当前已经存在标识为${id}的map对象`
        };
    }
    else {
        maps.set(id, map);
        return {
            map,
            message: 'map对象添加成功'
        };
    }
}
/**
 * @function CesiumManager.removeMap
 * @description 从MapManager中移除地图对象
 * @param {CesiumMapType | string | number} map - 地图对象或地图id，为空时删除主地图对象
 * @return {string} message - 提示信息
 */
function removeMap(mapOrId) {
    let id;
    if (mapOrId) {
        if (typeof mapOrId === 'object') {
            id = mapOrId.uid;
        }
        else {
            id = mapOrId;
        }
    }
    else {
        id = mainMapId;
    }
    if (id === mainMapId) {
        mainMapId = undefined;
    }
    if (maps.has(id)) {
        maps.delete(id);
        return 'map对象删除成功';
    }
    else {
        return '不存在当前map对象';
    }
}
/**
 * @function CesiumManager.getMap
 * @description 获取地图对象
 * @param {string|number|null} mapId - 地图id，为空时获取第一个加入MapManager的主地图对象
 * @return {CesiumMapType} map
 */
function getMap(mapId) {
    if (!mapId) {
        mapId = mainMapId;
    }
    const map = maps.get(mapId);
    return map;
}
/**
 * @function CesiumManager.hasMap
 * @description 判断是否存在地图对象
 * @param {string|number} id - 图层id
 * @return {boolean} 是否存在当前id的Map
 */
function hasMap(id) {
    return maps.has(id);
}
/**
 * @function CesiumManager.getAllMap
 * @description 获取所有地图对象
 * @return {CesiumMapType[]}
 */
function getAllMap() {
    const arr = [];
    maps.forEach((map) => {
        arr.push(map);
    });
    return arr;
}
/**
 * @function CesiumManager.setLayer
 * @description 存储图层对象
 * @param {string|number} id - 图层id
 * @param {object} layer - 图层对象
 */
function setLayer(id, layer) {
    return layers.set(id, layer);
}
/**
 * 获取图层对象
 * @function CesiumManager.getLayer
 * @description 获取图层对象
 * @param {string|number} id - 图层id
 * @return {object} layer - 图层对象
 */
function getLayer(id) {
    return layers.get(id);
}
/**
 * @function CesiumManager.hasLayer
 * @description 判断是否存在图层对象
 * @param {string|number} id - 图层id
 * @return {boolean} 是否存在当前id的图层
 */
function hasLayer(id) {
    return layers.has(id);
}
/**
 * @function CesiumManager.deleteLayer
 * @description 从存储对象中删除图层对象
 * @param {string|number} id - 图层id
 * @return {boolean} 是否删除
 */
function deleteLayer(id) {
    return layers.delete(id);
}
export { addMap, getMap, hasMap, getAllMap, removeMap, setLayer, getLayer, hasLayer, deleteLayer };
