import type Analysis from "../../../analysis/Analysis.js";
import type AreaMeasurementAnalysisView3D from "./AreaMeasurementAnalysisView3D.js";
import type DimensionAnalysisView3D from "./DimensionAnalysisView3D.js";
import type DirectLineMeasurementAnalysisView3D from "./DirectLineMeasurementAnalysisView3D.js";
import type ElevationProfileAnalysisView3D from "./ElevationProfileAnalysisView3D.js";
import type LineOfSightAnalysisView3D from "./LineOfSightAnalysisView3D.js";
import type ShadowCastAnalysisView3D from "./ShadowCastAnalysisView3D.js";
import type SliceAnalysisView3D from "./SliceAnalysisView3D.js";
import type ViewshedAnalysisView3D from "./ViewshedAnalysisView3D.js";
import type VolumeMeasurementAnalysisView3D from "./VolumeMeasurementAnalysisView3D.js";

export interface AnalysisView3DMap {
  "area-measurement": AreaMeasurementAnalysisView3D;
  dimension: DimensionAnalysisView3D;
  "direct-line-measurement": DirectLineMeasurementAnalysisView3D;
  "distance-measurement": never;
  "elevation-profile": ElevationProfileAnalysisView3D;
  "line-of-sight": LineOfSightAnalysisView3D;
  "shadow-cast": ShadowCastAnalysisView3D;
  slice: SliceAnalysisView3D;
  viewshed: ViewshedAnalysisView3D;
  "volume-measurement": VolumeMeasurementAnalysisView3D;
}

export type AnalysisView3DFor<AnalysisType extends Analysis> = AnalysisView3DMap[AnalysisType["type"]];

/** Union of all possible analysis views that can be added to a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). */
export type AnalysisView3DUnion = AreaMeasurementAnalysisView3D | DimensionAnalysisView3D | DirectLineMeasurementAnalysisView3D | ElevationProfileAnalysisView3D | LineOfSightAnalysisView3D | ShadowCastAnalysisView3D | SliceAnalysisView3D | ViewshedAnalysisView3D | VolumeMeasurementAnalysisView3D;