/**
 * 中文 locale — 工具描述 & 参数描述
 * 设置 CESIUM_LOCALE=zh-CN 启用
 */

export const toolDescriptions: Record<string, string> = {
  // — view
  flyTo: '飞行到指定经纬度位置（带动画过渡）',
  setView: '瞬间切换到指定经纬度视角（无动画）',
  getView: '获取当前相机视角信息（经纬度、高度、角度）',
  zoomToExtent: '缩放到指定地理范围',
  saveViewpoint: '保存当前视角为书签（名称 → 视角状态），可通过 loadViewpoint 恢复',
  loadViewpoint: '恢复已保存的视角书签（带飞行动画），返回保存的视角状态',
  listViewpoints: '列出所有已保存的视角书签',

  // — entity
  addMarker: '在指定经纬度添加标注点，返回 layerId 供后续操作',
  addLabel: '为 GeoJSON 要素添加文本标注（显示属性值）',
  addModel: '在指定经纬度放置 3D 模型（glTF/GLB），返回 entityId',
  addPolygon: '在地图上添加多边形区域（面积、边界），返回 entityId',
  addPolyline: '在地图上添加折线（路径、线段），返回 entityId',
  updateEntity: '更新已有实体的属性（位置、颜色、标签、缩放、可见性）',
  removeEntity: '移除单个实体（通过 entityId）',
  batchAddEntities: '批量添加多个实体（一次调用创建多个 marker/polyline/polygon/model 等），返回所有 entityId',
  queryEntities: '查询已有实体 — 按名称、类型、空间范围过滤，返回 entityId/name/type/position 列表',

  // — layer
  addGeoJsonLayer: '添加 GeoJSON 图层到地图（支持 Point/Line/Polygon，可配置颜色/分级/分类渲染）。data 和 url 二选一',
  addGeoJsonPrimitive: '高性能加载大规模 GeoJSON 数据（10万+ 要素）。绕过 Entity 系统，直接使用 Primitive 渲染，适合海量数据可视化。data 和 url 二选一',
  listLayers: '获取当前所有图层列表（含 ID、名称、类型、可见性）',
  getLayerSchema: '获取图层的属性字段结构 — 返回字段名、类型、示例值，适用于 GeoJSON/CZML/KML/3D Tiles 图层',
  removeLayer: '从地图上移除指定图层（按图层ID）',
  setLayerVisibility: '设置图层可见性',
  updateLayerStyle: '修改已有图层的样式（颜色、透明度、标注样式、3D Tiles 样式等）',
  setBasemap: '切换底图风格（暗色/卫星/标准/OSM/ArcGIS/浅色/天地图/高德等）',

  // — camera
  lookAtTransform: '从指定航向/俯仰/距离观察特定位置（环绕式相机）',
  startOrbit: '开始围绕当前视图中心旋转相机',
  stopOrbit: '停止相机环绕动画',
  setCameraOptions: '配置相机控制器选项（启用/禁用旋转、缩放、倾斜等）',

  // — entity-ext
  addBillboard: '在地球上指定位置添加广告牌（图片图标）',
  addBox: '在指定位置添加 3D 盒子实体',
  addCorridor: '添加走廊（带宽度的路径）实体',
  addCylinder: '在指定位置添加圆柱体或圆锥体实体',
  addEllipse: '在指定位置添加椭圆形实体',
  addRectangle: '添加由地理边界定义的矩形实体',
  addWall: '沿一系列位置添加墙体实体',

  // — animation
  createAnimation: '创建基于时间的航点动画（实体沿路径移动）',
  controlAnimation: '播放或暂停当前动画',
  removeAnimation: '移除动画实体',
  listAnimations: '列出所有活动动画',
  updateAnimationPath: '更新动画路径的视觉属性',
  trackEntity: '用相机跟踪（跟随）实体，或停止跟踪',
  controlClock: '配置 Cesium 时钟（时间范围、速度、动画状态）',
  setGlobeLighting: '启用/禁用地球光照和大气效果',

  // — scene
  setSceneOptions: '配置场景环境（雾、大气、阴影、太阳、月亮、背景色、深度测试）',
  setPostProcess: '配置后处理特效（泛光、环境光遮蔽 SSAO、抗锯齿 FXAA）',

  // — tiles
  load3dTiles: '加载 3D Tiles 数据集（如建筑白膜、城市模型）',
  loadTerrain: '加载或切换地形（平坦/ArcGIS/CesiumIon/自定义 URL）',
  loadImageryService: '加载影像服务图层（WMS/WMTS/XYZ/ArcGIS MapServer）',
  loadCzml: '加载 CZML 时序数据源（CesiumJS 原生格式，支持时变位置/样式/动画）。data 和 url 二选一',
  loadKml: '加载 KML/KMZ 数据源（Google Earth 格式）。data 和 url 二选一',

  // — interaction
  screenshot: '截取当前地图视图（返回 base64 PNG）',
  highlight: '高亮指定图层的要素',
  measure: '测量距离或面积（基于坐标计算，可在地图上显示）',

  // — clear
  clearAll: '清除地图上的所有图层、实体、动画和轨迹（一键重置场景）',

  // — entity inspection
  getEntityProperties: '获取指定实体的详细属性 — 包括类型、位置、自定义属性和图形属性',

  // — scene export
  exportScene: '导出当前场景快照 — 包含视角、图层列表、实体列表和时间戳',

  // — trajectory
  playTrajectory: '播放移动轨迹动画',

  // — heatmap
  addHeatmap: '添加热力图图层（基于 GeoJSON 点数据生成热力可视化）',

  // — geolocation
  geocode: '将地址、地标或地名转换为地理坐标（经纬度）。使用 OpenStreetMap Nominatim 免费服务，无需 API Key。',
}

export const paramDescriptions: Record<string, Record<string, string>> = {
  flyTo: {
    longitude: '经度（-180 ~ 180）',
    latitude: '纬度（-90 ~ 90）',
    height: '相机高度（米），默认 50000',
    heading: '航向角（度），0 为正北',
    pitch: '俯仰角（度），-90 为正下方',
    duration: '飞行动画时长（秒）',
  },
  setView: {
    longitude: '经度（-180 ~ 180）',
    latitude: '纬度（-90 ~ 90）',
    height: '高度（米）',
    heading: '航向角（度）',
    pitch: '俯仰角（度）',
    roll: '翻滚角（度）',
  },
  zoomToExtent: {
    west: '西边界经度（度）',
    south: '南边界纬度（度）',
    east: '东边界经度（度）',
    north: '北边界纬度（度）',
    duration: '动画时长（秒）',
  },
  saveViewpoint: {
    name: '书签名称（唯一标识，重复则覆盖）',
  },
  loadViewpoint: {
    name: '书签名称',
    duration: '飞行动画时长（秒），0 表示瞬移',
  },
  addMarker: {
    longitude: '经度（-180 ~ 180）',
    latitude: '纬度（-90 ~ 90）',
    label: '标注文本',
    color: '标注颜色（CSS 格式）',
    size: '点大小（像素）',
    id: '自定义图层ID（不传则自动生成）',
  },
  addLabel: {
    data: 'GeoJSON FeatureCollection 对象',
    field: '用作标注文本的属性字段名（如 "name"、"population"）',
    style: '标注样式（font, fillColor, outlineColor, scale 等）',
  },
  addModel: {
    longitude: '经度（-180 ~ 180）',
    latitude: '纬度（-90 ~ 90）',
    height: '放置高度（米）',
    url: 'glTF/GLB 模型文件 URL',
    scale: '模型缩放比例',
    heading: '航向角（度），0=正北',
    pitch: '俯仰角（度）',
    roll: '翻滚角（度）',
    label: '模型标注文本',
  },
  addPolygon: {
    coordinates: '多边形外环坐标 [[lon, lat, height?], ...]',
    color: '填充颜色（CSS 格式）',
    outlineColor: '描边颜色',
    opacity: '填充透明度（0~1）',
    extrudedHeight: '拉伸高度（米），可用于创建立体效果',
    clampToGround: '是否贴地',
    label: '多边形标注文本',
  },
  addPolyline: {
    coordinates: '折线坐标数组 [[lon, lat, height?], ...]',
    color: '线条颜色（CSS 格式）',
    width: '线条宽度（像素）',
    clampToGround: '是否贴地',
    label: '折线标注文本',
  },
  updateEntity: {
    entityId: '实体ID（addMarker/addPolyline 等返回的 entityId）',
    position: '新位置坐标',
    label: '新标注文本',
    color: '新颜色（CSS 格式）',
    scale: '新缩放比例',
    show: '是否显示',
  },
  removeEntity: {
    entityId: '要移除的实体ID',
  },
  batchAddEntities: {
    entities: '实体定义数组，每个元素包含 type 字段和该类型所需的参数',
  },
  queryEntities: {
    name: '名称模糊匹配（不区分大小写）',
    type: '按实体类型过滤',
    bbox: '空间范围过滤 [west, south, east, north]（度）',
  },
  addGeoJsonLayer: {
    id: '图层ID（不传则自动生成）',
    name: '图层显示名称',
    data: 'GeoJSON FeatureCollection 对象（与 url 二选一）',
    url: 'GeoJSON 文件 URL（与 data 二选一，浏览器端 fetch 加载）',
    style: '样式配置（color, opacity, pointSize, choropleth, category）',
  },
  addGeoJsonPrimitive: {
    id: '图层ID（不传则自动生成）',
    name: '图层显示名称',
    data: 'GeoJSON 对象（与 url 二选一）',
    url: 'GeoJSON 文件 URL（与 data 二选一）',
    allowPicking: '是否允许拾取（默认 true，关闭可提升性能）',
    show: '是否显示（默认 true）',
  },
  listLayers: {},
  getLayerSchema: {
    layerId: '图层ID（可通过 listLayers 获取）',
  },
  removeLayer: {
    id: '要移除的图层ID（可通过 listLayers 获取）',
  },
  setLayerVisibility: {
    id: '图层ID',
    visible: '是否可见',
  },
  updateLayerStyle: {
    layerId: '图层ID',
    labelStyle: '标注样式（font, fillColor, outlineColor, outlineWidth, scale 等）',
    layerStyle: '实体图层样式（color, opacity, strokeWidth, pointSize；GeoJSON 主题样式 choropleth/category/randomColor/gradient 互斥）',
    imageryStyle: '影像图层视觉样式（alpha, brightness, contrast, hue, saturation, gamma）；显隐请使用 setLayerVisibility',
    primitiveStyle: 'GeoJSON Primitive 材质样式（color, opacity, outlineColor, outlineWidth, pointSize, lineWidth）；显隐请使用 setLayerVisibility',
    tileStyle: '3D Tiles 样式（Cesium3DTileStyle 表达式：color, show, pointSize, meta）',
  },
  setBasemap: {
    basemap: '底图类型：dark=暗色, satellite=卫星影像, standard=标准, osm=OpenStreetMap, arcgis=ArcGIS街道, light=浅色, tianditu_vec=天地图矢量, tianditu_img=天地图影像, amap=高德地图, amap_satellite=高德卫星',
    token: '底图服务令牌（天地图等需要认证的服务必填）',
    url: '自定义URL模板（{x},{y},{z}占位符），提供时忽略basemap参数',
  },
  highlight: {
    layerId: '图层ID',
    featureIndex: '要素索引（不传则高亮全部）',
    color: '高亮颜色（CSS 格式）',
  },
  measure: {
    mode: '测量模式：distance=距离, area=面积',
    positions: '坐标数组 [[经度, 纬度, 高度?], ...]',
    showOnMap: '是否在地图上显示测量结果',
    id: '自定义测量实体ID',
  },
  getEntityProperties: {
    entityId: '实体ID（可通过 queryEntities 获取）',
  },
  lookAtTransform: {
    longitude: '目标经度（度）',
    latitude: '目标纬度（度）',
    height: '目标高度（米）',
    heading: '相机航向角（度），0=正北',
    pitch: '相机俯仰角（度），-90=正下方',
    range: '距目标距离（米）',
  },
  startOrbit: {
    speed: '旋转速度（弧度/帧）',
    clockwise: '旋转方向',
  },
  setCameraOptions: {
    enableRotate: '启用相机旋转',
    enableTranslate: '启用相机平移',
    enableZoom: '启用相机缩放',
    enableTilt: '启用相机倾斜',
    enableLook: '启用相机环视',
    minimumZoomDistance: '最小缩放距离（米）',
    maximumZoomDistance: '最大缩放距离（米）',
    enableInputs: '启用/禁用所有相机输入',
  },
  addBillboard: {
    longitude: '经度（度）',
    latitude: '纬度（度）',
    height: '高度（米）',
    name: '广告牌名称',
    image: '广告牌图片 URL',
    scale: '缩放比例',
    color: '着色颜色',
    pixelOffset: '位置像素偏移',
    horizontalOrigin: '水平原点',
    verticalOrigin: '垂直原点',
    heightReference: '高度参考',
  },
  addBox: {
    longitude: '经度（度）',
    latitude: '纬度（度）',
    height: '高度（米）',
    name: '盒子名称',
    dimensions: '盒子尺寸',
    material: '材质（颜色字符串、RGBA 对象或材质规格）',
    outline: '显示轮廓线',
    outlineColor: '轮廓线颜色',
    fill: '显示填充',
    orientation: '朝向（航向/俯仰/翻滚角度）',
    heightReference: '高度参考',
  },
  addCorridor: {
    name: '走廊名称',
    positions: '走廊沿线位置数组',
    width: '走廊宽度（米）',
    material: '材质',
    cornerType: '拐角类型',
    height: '离地高度（米）',
    extrudedHeight: '拉伸高度（米）',
    outline: '显示轮廓线',
    outlineColor: '轮廓线颜色',
  },
  addCylinder: {
    longitude: '经度（度）',
    latitude: '纬度（度）',
    height: '高度（米）',
    name: '圆柱体名称',
    length: '圆柱体长度/高度（米）',
    topRadius: '顶部半径（米）',
    bottomRadius: '底部半径（米）',
    material: '材质',
    outline: '显示轮廓线',
    outlineColor: '轮廓线颜色',
    fill: '显示填充',
    orientation: '朝向（航向/俯仰/翻滚角度）',
    numberOfVerticalLines: '垂直线条数',
    slices: '分片数',
  },
  addEllipse: {
    longitude: '中心经度（度）',
    latitude: '中心纬度（度）',
    height: '高度（米）',
    name: '椭圆名称',
    semiMajorAxis: '半长轴（米）',
    semiMinorAxis: '半短轴（米）',
    material: '材质',
    extrudedHeight: '拉伸高度（米）',
    rotation: '旋转角（弧度）',
    outline: '显示轮廓线',
    outlineColor: '轮廓线颜色',
    fill: '显示填充',
    stRotation: '纹理旋转角（弧度）',
    numberOfVerticalLines: '垂直线条数',
  },
  addRectangle: {
    name: '矩形名称',
    west: '西边界经度（度）',
    south: '南边界纬度（度）',
    east: '东边界经度（度）',
    north: '北边界纬度（度）',
    material: '材质',
    height: '高度（米）',
    extrudedHeight: '拉伸高度（米）',
    rotation: '旋转角（弧度）',
    outline: '显示轮廓线',
    outlineColor: '轮廓线颜色',
    fill: '显示填充',
    stRotation: '纹理旋转角（弧度）',
  },
  addWall: {
    name: '墙体名称',
    positions: '墙体沿线位置数组',
    minimumHeights: '各位置最小高度',
    maximumHeights: '各位置最大高度',
    material: '材质',
    outline: '显示轮廓线',
    outlineColor: '轮廓线颜色',
    fill: '显示填充',
  },
  createAnimation: {
    name: '动画名称',
    waypoints: '带位置和时间戳的航点数组',
    modelUri: 'glTF/GLB 模型 URL，或预设：cesium_man, cesium_air, ground_vehicle, cesium_drone',
    showPath: '显示轨迹路径',
    pathWidth: '路径宽度（像素）',
    pathColor: '路径颜色（CSS）',
    pathLeadTime: '路径前导时间（秒）',
    pathTrailTime: '路径尾迹时间（秒）',
    multiplier: '时钟速率倍数',
    shouldAnimate: '自动开始动画',
  },
  controlAnimation: {
    action: '播放或暂停',
  },
  removeAnimation: {
    entityId: '要移除的动画实体 ID',
  },
  updateAnimationPath: {
    entityId: '动画实体 ID',
    width: '新路径宽度（像素）',
    color: '新路径颜色（CSS）',
    leadTime: '新前导时间（秒）',
    trailTime: '新尾迹时间（秒）',
    show: '显示/隐藏路径',
  },
  trackEntity: {
    entityId: '要跟踪的实体 ID（省略则停止跟踪）',
    heading: '相机航向角（度）',
    pitch: '相机俯仰角（度）',
    range: '相机距实体距离（米）',
  },
  controlClock: {
    action: '时钟操作',
    startTime: 'ISO 8601 开始时间（用于 configure）',
    stopTime: 'ISO 8601 结束时间（用于 configure）',
    currentTime: 'ISO 8601 当前时间（用于 configure）',
    time: 'ISO 8601 跳转时间（用于 setTime）',
    multiplier: '时钟速率倍数（用于 configure/setMultiplier）',
    shouldAnimate: '是否播放动画（用于 configure）',
    clockRange: '时钟范围模式（用于 configure）',
  },
  setGlobeLighting: {
    enableLighting: '启用地球光照',
    dynamicAtmosphereLighting: '启用动态大气光照',
    dynamicAtmosphereLightingFromSun: '使用太阳位置进行大气光照',
  },
  setSceneOptions: {
    fogEnabled: '启用/禁用雾效',
    fogDensity: '雾的密度（0.0~1.0，默认约 0.0002）',
    fogMinimumBrightness: '雾的最低亮度（0.0~1.0）',
    skyAtmosphereShow: '显示天空大气',
    skyAtmosphereHueShift: '天空色调偏移（-1.0~1.0）',
    skyAtmosphereSaturationShift: '天空饱和度偏移（-1.0~1.0）',
    skyAtmosphereBrightnessShift: '天空亮度偏移（-1.0~1.0）',
    groundAtmosphereShow: '显示地面大气',
    shadowsEnabled: '启用阴影',
    shadowsSoftShadows: '使用软阴影',
    shadowsDarkness: '阴影暗度（0.0=无阴影，1.0=全暗）',
    sunShow: '显示太阳',
    sunGlowFactor: '太阳光晕系数（默认 1.0）',
    moonShow: '显示月亮',
    depthTestAgainstTerrain: '启用地形深度测试（地形后方实体将被隐藏）',
    backgroundColor: '场景背景色（CSS 格式，如 "#000000"）',
  },
  setPostProcess: {
    bloom: '启用泛光特效',
    bloomContrast: '泛光对比度（默认 128）',
    bloomBrightness: '泛光亮度（默认 -0.3）',
    bloomDelta: '泛光 delta（默认 1.0）',
    bloomSigma: '泛光 sigma（默认 3.78）',
    bloomStepSize: '泛光步长（默认 5.0）',
    bloomGlowOnly: '仅显示发光效果（不显示基础场景）',
    ambientOcclusion: '启用环境光遮蔽（SSAO）',
    aoIntensity: 'AO 强度（默认 3.0）',
    aoBias: 'AO 偏差（默认 0.1）',
    aoLengthCap: 'AO 长度上限（默认 0.26）',
    aoStepSize: 'AO 步长（默认 1.95）',
    fxaa: '启用 FXAA 抗锯齿',
  },
  load3dTiles: {
    id: '图层ID',
    name: '图层名称',
    url: 'tileset.json 的 URL',
    maximumScreenSpaceError: '最大屏幕空间误差（值越小越精细）',
    heightOffset: '高度偏移（米）',
  },
  loadTerrain: {
    provider: '地形提供者类型',
    url: '自定义地形服务 URL',
    cesiumIonAssetId: 'Cesium Ion 资产ID（provider=cesiumion 时需要）',
  },
  loadImageryService: {
    id: '图层ID',
    name: '图层名称',
    url: '影像服务 URL',
    serviceType: '服务类型',
    layerName: 'WMS/WMTS 图层名',
    opacity: '透明度（0~1）',
  },
  loadCzml: {
    id: '图层ID（不传则自动生成）',
    name: '数据源显示名称',
    data: 'CZML 数据包数组（与 url 二选一）',
    url: 'CZML 文件 URL（与 data 二选一，浏览器端 fetch 加载）',
    sourceUri: 'CZML 中相对引用的基础 URI',
    clampToGround: '将实体贴地显示',
    flyTo: '加载后自动飞行到数据范围（默认 true）',
  },
  loadKml: {
    id: '图层ID（不传则自动生成）',
    name: '数据源显示名称',
    url: 'KML/KMZ 文件 URL（与 data 二选一，浏览器端 fetch 加载）',
    data: 'KML XML 字符串（与 url 二选一）',
    sourceUri: 'KML 中相对引用的基础 URI',
    clampToGround: '将实体贴地显示',
    flyTo: '加载后自动飞行到数据范围（默认 true）',
  },
  playTrajectory: {
    id: '轨迹图层ID',
    name: '轨迹名称',
    coordinates: '轨迹坐标数组 [[lon, lat, alt?], ...]',
    durationSeconds: '动画时长（秒）',
    trailSeconds: '尾迹长度（秒）',
    label: '移动体标签',
  },
  addHeatmap: {
    data: 'GeoJSON Point FeatureCollection',
    radius: '热力影响半径（像素）',
  },
  geocode: {
    address: '地址、地标或地名，例如 "故宫"、"Eiffel Tower"、"东京塔"',
    countryCode: '两位 ISO 国家代码限制搜索范围（如 "CN"、"US"、"JP"）',
  },
}
