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

export interface ElevationProfileResultProperties {}

/**
 * Represents the result for a computed [profile line](https://developers.arcgis.com/javascript/latest/references/core/analysis/ElevationProfile/ElevationProfileLine/).
 * Result objects are initialized by the analysis view and dynamically updated as the elevation profile is generated.
 *
 * The [profile](https://developers.arcgis.com/javascript/latest/references/core/views/analysis/ElevationProfile/ElevationProfileResult/#profile) property identifies the computed
 * line associated with the result. In some cases the results array may contain more entries than the top-level
 * [ElevationProfileAnalysis.profiles](https://developers.arcgis.com/javascript/latest/references/core/analysis/ElevationProfileAnalysis/#profiles) collection.
 *
 * @since 4.34
 * @see [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/ElevationProfileAnalysis/)
 * @see [ElevationProfileAnalysisView2D](https://developers.arcgis.com/javascript/latest/references/core/views/2d/analysis/ElevationProfileAnalysisView2D/)
 * @see [ElevationProfileAnalysisView3D](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/ElevationProfileAnalysisView3D/)
 */
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/references/core/views/analysis/ElevationProfile/ElevationProfileResult/#samples) and [statistics](https://developers.arcgis.com/javascript/latest/references/core/views/analysis/ElevationProfile/ElevationProfileResult/#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/references/core/analysis/ElevationProfileAnalysis/#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/references/core/views/2d/analysis/ElevationProfileAnalysisView2D/#effectiveDisplayUnits) or
   * [ElevationProfileAnalysisView3D.effectiveDisplayUnits](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/ElevationProfileAnalysisView3D/#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/references/core/views/2d/analysis/ElevationProfileAnalysisView2D/#effectiveDisplayUnits) or
   * [ElevationProfileAnalysisView3D.effectiveDisplayUnits](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/ElevationProfileAnalysisView3D/#effectiveDisplayUnits).
   */
  get statistics(): ElevationProfileStatistics | null | undefined;
}