"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getWorldGeoJSON = getWorldGeoJSON;
exports.getCountyOrRegionGeoJSON = getCountyOrRegionGeoJSON;
exports.getRegionGeoJSON = getRegionGeoJSON;
const path_1 = __importDefault(require("path"));
// ISO 3166-1 alpha-3 代码到区域的映射表（
const ISO_TO_REGION_MAP = {
    'CHN': 'as',
    'JPN': 'as',
    'KOR': 'as',
    'GBR': 'eu',
    // 如果有其他大洲的ISO代码，需要在这里添加映射
};
/**
 * 获取世界整体轮廓数据，或通过 ISO 三位代码获取特定国家的数据。
 * @param iso3Code - 可选。国家 ISO 三位代码（如 'CHN'）。如果提供，则返回该国家的 GeoJSON 特征；否则返回所有国家。
 * @returns {FeatureCollection | null} GeoJSON 格式的地理数据，如果加载或过滤失败则返回 null。
 */
function getWorldGeoJSON(iso3Code) {
    try {
        const worldGeoJSON = require(path_1.default.join(__dirname, 'src', 'geojson', 'globe', 'world.json'));
        if (iso3Code) {
            const normalizedIso3Code = iso3Code.toUpperCase();
            const filteredFeatures = worldGeoJSON.features.filter((feature) => feature.properties && feature.properties.iso_a3 === normalizedIso3Code);
            return { ...worldGeoJSON, features: filteredFeatures };
        }
        return worldGeoJSON;
    }
    catch (error) {
        console.error('加载世界地理数据失败：', error);
        return null;
    }
}
/**
 * 通过ISO三位代码和层级获取对应国家或地区的GeoJSON数据
 * @param iso3Code - 国家的ISO三位代码 (例如: 'CHN', 'JPN')，不区分大小写
 * @param level - 数据层级 (例如: 1, 2, 3)
 * @param filterKey? - 可选。用于过滤GeoJSON特点的属性键名 (例如: 'name', 'gb')
 * @param filterValue? - 可选。用于过滤GeoJSON特点的属性值 (例如: '北京市', '156110000')
 * @returns {FeatureCollection | null} GeoJSON 格式的地理数据对象，如果未找到则返回 null
 */
function getCountyOrRegionGeoJSON(iso3Code, level, filterKey, filterValue) {
    const normalizedIso3Code = iso3Code.toUpperCase();
    const region = ISO_TO_REGION_MAP[normalizedIso3Code];
    if (!region) {
        console.warn(`未找到 ISO 代码 ${iso3Code} 对应的区域信息。请检查 ISO_TO_REGION_MAP。`);
        return null;
    }
    const filePath = path_1.default.join(__dirname, 'src', 'geojson', 'countries', region, normalizedIso3Code.toLowerCase(), 'global', `${normalizedIso3Code.toLowerCase()}-level-${level}.json`);
    try {
        const countryData = require(filePath);
        if (filterKey && filterValue) {
            const filteredFeatures = countryData.features.filter((feature) => feature.properties && feature.properties[filterKey] == filterValue);
            // 注意：这里使用 == 允许匹配字符串和数字类型，如果需要严格匹配，请使用 ===
            return { ...countryData, features: filteredFeatures };
        }
        return countryData;
    }
    catch (error) {
        console.error(`加载地理数据失败，路径：${filePath}。错误信息：`, error);
        return null;
    }
}
/**
 * 获取指定国家二级行政单位的GeoJSON数据，并支持属性过滤
 * @param iso3Code - 国家ISO三位代码（如 CHN、JPN、KOR）
 * @param regionCode - 二级行政单位代码（如 TW）
 * @param level - 数据层级（如2）
 * @param filterKey - 可选，属性键名
 * @param filterValue - 可选，属性值
 * @returns {FeatureCollection | null} 过滤后的GeoJSON数据
 */
function getRegionGeoJSON(iso3Code, regionCode, level = 2, filterKey, filterValue) {
    const filePath = path_1.default.join(__dirname, 'src', 'geojson', 'countries', 'as', iso3Code.toLowerCase(), 'region', regionCode.toLowerCase(), `${iso3Code.toLowerCase()}-${regionCode.toLowerCase()}-level-${level}.json`);
    try {
        const data = require(filePath);
        if (filterKey && filterValue) {
            const filteredFeatures = data.features.filter((feature) => feature.properties && feature.properties[filterKey] == filterValue);
            return { ...data, features: filteredFeatures };
        }
        return data;
    }
    catch (error) {
        console.error(`加载地理数据失败，路径：${filePath}。错误信息：`, error);
        return null;
    }
}
