import type BaseImageMeasureResult from "./BaseImageMeasureResult.js";
import type ImageMeasureResultAngleValue from "./ImageMeasureResultAngleValue.js";
import type ImageMeasureResultLengthValue from "./ImageMeasureResultLengthValue.js";
import type { ImageMeasureResultLengthValueProperties } from "./ImageMeasureResultLengthValue.js";
import type { ImageMeasureResultAngleValueProperties } from "./ImageMeasureResultAngleValue.js";
import type { BaseImageMeasureResultProperties } from "./BaseImageMeasureResult.js";

export interface ImageDistanceResultProperties extends BaseImageMeasureResultProperties {
  /** An object containing the azimuth angle measurement values. */
  azimuthAngle?: ImageMeasureResultAngleValueProperties;
  /** An object containing results of the distance measurement between two points. */
  distance?: ImageMeasureResultLengthValueProperties;
  /**
   * An object containing elevation angle measurement values. Elevation angle measurements are returned only when
   * [ImageDistanceParameters.is3D](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageDistanceParameters/#is3D) is `true`.
   */
  elevationAngle?: ImageMeasureResultAngleValueProperties | null;
}

/**
 * Image service distance and angle measurement result returned when the [ImageryLayer.measureDistanceAndAngle()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#measureDistanceAndAngle)
 * or [measureDistanceAndAngle()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#measureDistanceAndAngle) methods resolve successfully.
 *
 * @since 4.26
 * @see [ImageryLayer.measureDistanceAndAngle()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#measureDistanceAndAngle)
 * @see [measureDistanceAndAngle()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#measureDistanceAndAngle)
 * @see [ImageDistanceParameters](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageDistanceParameters/)
 */
export default class ImageDistanceResult extends BaseImageMeasureResult {
  constructor(properties?: ImageDistanceResultProperties);
  /** An object containing the azimuth angle measurement values. */
  get azimuthAngle(): ImageMeasureResultAngleValue;
  set azimuthAngle(value: ImageMeasureResultAngleValueProperties);
  /** An object containing results of the distance measurement between two points. */
  get distance(): ImageMeasureResultLengthValue;
  set distance(value: ImageMeasureResultLengthValueProperties);
  /**
   * An object containing elevation angle measurement values. Elevation angle measurements are returned only when
   * [ImageDistanceParameters.is3D](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageDistanceParameters/#is3D) is `true`.
   */
  get elevationAngle(): ImageMeasureResultAngleValue | null | undefined;
  set elevationAngle(value: ImageMeasureResultAngleValueProperties | null | undefined);
}