import type Color from "../../Color.js";
import type ElevationProfileLine from "./ElevationProfileLine.js";
import type { IntersectItem } from "../../analysis/ElevationProfile/ElevationProfileLineScene.js";
import type { ElevationProfileLineProperties } from "./ElevationProfileLine.js";
import type { ColorLike } from "../../Color.js";

/** @deprecated since 5.0. Use the [Elevation Profile component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-elevation-profile/) or [ElevationProfileLineScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfile-ElevationProfileLineScene.html) from [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html) instead. For information on widget deprecation, read about [Esri's move to web components](https://developers.arcgis.com/javascript/latest/components-transition-plan/). */
export interface ElevationProfileLineViewProperties extends ElevationProfileLineProperties, Partial<Pick<ElevationProfileLineView, "exclude" | "include">> {
  /**
   * Color of the line on the chart and in the view.
   *
   * @default "#cf4ccf"
   */
  color?: ColorLike;
  /**
   * Whether a line visualization representing [elevationSamples](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#samples)
   * should be added to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). This property doesn't apply to [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
   *
   * @default true
   * @since 4.20
   */
  viewVisualizationEnabled?: boolean;
}

/**
 * Profile line which samples elevation directly from the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
 *
 * All volumetric objects in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) contribute to the resulting profile,
 * including [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html), [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), [IntegratedMeshLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html), [IntegratedMesh3DTilesLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMesh3DTilesLayer.html),
 * and FeatureLayers with volumetric 3D symbols (e.g. [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html),
 * [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html)). The input graphic itself is excluded when the profile is generated.
 * When the [Camera](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html) changes, the profile line will be updated to
 * reflect what is currently visible in the view.
 *
 * This profile line type is not supported in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
 *
 * ![elevation-profile](https://developers.arcgis.com/javascript/latest/assets/img/apiref/widgets/elevation-profile/elevation-profile-city.png)
 * _The purple building profile is the result of a profile line of type view._
 *
 * @deprecated since 5.0. Use the [Elevation Profile component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-elevation-profile/) or [ElevationProfileLineScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfile-ElevationProfileLineScene.html) from [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html) instead. For information on widget deprecation, read about [Esri's move to web components](https://developers.arcgis.com/javascript/latest/components-transition-plan/).
 * @since 4.18
 * @see [ElevationProfile](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html) widget - Deprecated since 5.0. Use the [Elevation Profile component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-elevation-profile/) instead.
 * @see [ElevationProfileViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html) - Deprecated since 5.0. Use [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html) instead.
 * @see [ElevationProfileLineGround](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineGround.html) - Deprecated since 5.0. Use [ElevationProfileLineGround](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfile-ElevationProfileLineGround.html) from [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html) instead.
 * @see [ElevationProfileLineInput](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineInput.html) - Deprecated since 5.0. Use [ElevationProfileLineInput](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfile-ElevationProfileLineInput.html) from [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html) instead.
 * @see [ElevationProfileLineQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineQuery.html) - Deprecated since 5.0. Use [ElevationProfileLineQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfile-ElevationProfileLineQuery.html) from [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html) instead.
 * @example
 * const elevationProfile = new ElevationProfile({
 *   view: view,
 *   profiles: [{
 *     type: "view"
 *   }]
 * });
 */
export default abstract class ElevationProfileLineView extends ElevationProfileLine {
  /**
   * Color of the line on the chart and in the view.
   *
   * @default "#cf4ccf"
   */
  get color(): Color;
  set color(value: ColorLike);
  /** Items which are to be excluded when querying elevation from view. */
  accessor exclude: HitTestOptionsItem | null | undefined;
  /** Items which are to be hit when querying elevation from view. */
  accessor include: HitTestOptionsItem | null | undefined;
  /** The line type. */
  readonly type: "view";
  /**
   * Whether a line visualization representing [elevationSamples](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#samples)
   * should be added to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). This property doesn't apply to [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
   *
   * @default true
   * @since 4.20
   */
  accessor viewVisualizationEnabled: boolean;
}

/** @deprecated since 5.0. Use the [Elevation Profile component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-elevation-profile/) or [ElevationProfileLineScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfile-ElevationProfileLineScene.html) from [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html) instead. For information on widget deprecation, read about [Esri's move to web components](https://developers.arcgis.com/javascript/latest/components-transition-plan/). */
export type HitTestOptionsItem = IntersectItem | Iterable<IntersectItem | Iterable<IntersectItem>>;