import type Layer from "../../layers/Layer.js";
import type CSVLayerView from "../layers/CSVLayerView.js";
import type DimensionLayerView from "../layers/DimensionLayerView.js";
import type FeatureLayerView from "../layers/FeatureLayerView.js";
import type GeoJSONLayerView from "../layers/GeoJSONLayerView.js";
import type ImageryLayerView from "../layers/ImageryLayerView.js";
import type LineOfSightLayerView from "../layers/LineOfSightLayerView.js";
import type MediaLayerView from "../layers/MediaLayerView.js";
import type SceneLayerView from "../layers/SceneLayerView.js";
import type ViewshedLayerView from "../layers/ViewshedLayerView.js";
import type WFSLayerView from "../layers/WFSLayerView.js";
import type { OGCFeatureLayerView } from "../layers/OGCFeatureLayerView.js";
import type { PointCloudLayerView } from "../layers/PointCloudLayerView.js";
import type { StreamLayerView } from "../layers/StreamLayerView.js";

export interface LayerView3DMap {
  "base-dynamic": never;
  "base-elevation": never;
  "base-tile": never;
  "bing-maps": never;
  "building-scene": never;
  catalog: never;
  "catalog-dynamic-group": never;
  "catalog-footprint": never;
  csv: CSVLayerView;
  dimension: DimensionLayerView;
  elevation: never;
  feature: FeatureLayerView;
  "gaussian-splat": never;
  "geo-rss": never;
  geojson: GeoJSONLayerView;
  graphics: GeoJSONLayerView;
  group: never;
  imagery: ImageryLayerView;
  "imagery-tile": never;
  "integrated-mesh": never;
  "integrated-mesh-3dtiles": never;
  kml: never;
  "knowledge-graph": never;
  "knowledge-graph-sublayer": never;
  "line-of-sight": LineOfSightLayerView;
  "link-chart": never;
  "map-image": never;
  "map-notes": never;
  media: MediaLayerView;
  "ogc-feature": OGCFeatureLayerView;
  "open-street-map": never;
  "oriented-imagery": never;
  parquet: never;
  "point-cloud": PointCloudLayerView;
  route: never;
  scene: SceneLayerView;
  stream: StreamLayerView;
  "subtype-group": never;
  tile: never;
  unknown: never;
  unsupported: never;
  "vector-tile": never;
  video: never;
  viewshed: ViewshedLayerView;
  voxel: never;
  wcs: never;
  "web-tile": never;
  wfs: WFSLayerView;
  wms: never;
  wmts: never;
}

export type LayerView3DFor<TLayer extends Layer> = LayerView3DMap[TLayer["type"]];