import type { ElevationProfileLineUnion } from "../../../analysis/ElevationProfile/types.js";
import type { Clonable, ClonableMixinProperties } from "../../../core/Clonable.js";
import type { ElevationProfileSample, ElevationProfileStatistics } from "./types.js";

export interface ElevationProfileResultProperties extends ClonableMixinProperties {}

/**
 * Represents the result for each [profile line](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfile-ElevationProfileLine.html)
 * configured in the [ElevationProfileAnalysis#profiles](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html#profiles)
 * collection. This result is initialized by the analysis view and is dynamically updated as the elevation profile is
 * generated.
 *
 * @since 4.34
 * @see [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html)
 * @see [ElevationProfileAnalysisView2D](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-analysis-ElevationProfileAnalysisView2D.html)
 * @see [ElevationProfileAnalysisView3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html)
 */
export default class ElevationProfileResult extends Clonable {
  constructor(properties?: ElevationProfileResultProperties);
  /**
   * Indicates whether the line is available. Unavailable lines are not sampled or displayed, and the corresponding
   * [samples](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-analysis-ElevationProfile-ElevationProfileResult.html#samples) and [statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-analysis-ElevationProfile-ElevationProfileResult.html#statistics) will be empty.
   *
   * Availability rules for each line type:
   * - `ground`: Available if any ground layers are visible.
   * - `input`: Always available.
   * - `query`: Available if the source is visible and any layers in that source (e.g. ground elevation layers) are also visible.
   * - `scene`: Always available in 3D.
   */
  get available(): boolean;
  /** The [profile line](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html#profiles) whose elevation is represented by this result. */
  get profile(): ElevationProfileLineUnion;
  /** Represents the progress of the elevation profile generation, ranging from 0 to 1. */
  get progress(): number;
  /**
   * Contains the samples that make up the elevation profile. Each sample represents a point along the profile.
   *
   * The distance and elevation values are given in the effective units specified in
   * [ElevationProfileAnalysisView2D#effectiveDisplayUnits](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-analysis-ElevationProfileAnalysisView2D.html#effectiveDisplayUnits) or
   * [ElevationProfileAnalysisView3D#effectiveDisplayUnits](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#effectiveDisplayUnits).
   */
  get samples(): ElevationProfileSample[] | null | undefined;
  /**
   * Provides statistics about the elevation profile, including minimum, maximum, and average elevation values,
   * elevation gain and loss, and slope information.
   *
   * The distance and elevation values are given in the effective units specified in
   * [ElevationProfileAnalysisView2D#effectiveDisplayUnits](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-analysis-ElevationProfileAnalysisView2D.html#effectiveDisplayUnits) or
   * [ElevationProfileAnalysisView3D#effectiveDisplayUnits](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#effectiveDisplayUnits).
   */
  get statistics(): ElevationProfileStatistics | null | undefined;
}