import type Point from "../../geometry/Point.js";
import type BaseImageMeasureParameters from "./BaseImageMeasureParameters.js";
import type { AngleUnit, LengthUnit } from "../../core/units.js";
import type { BaseImageMeasureParametersProperties } from "./BaseImageMeasureParameters.js";
import type { PointProperties } from "../../geometry/Point.js";

export interface ImageDistanceParametersProperties extends BaseImageMeasureParametersProperties, Partial<Pick<ImageDistanceParameters, "angularUnit" | "is3D" | "linearUnit">> {
  /** A point that defines the from location of the distance and angle measurement. */
  fromGeometry?: PointProperties;
  /** A point that defines the to location of the distance and angle measurement. */
  toGeometry?: PointProperties;
}

/**
 * Input parameters used by 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 to perform imagery
 * distance and angle mensuration.
 *
 * @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 [ImageDistanceResult](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageDistanceResult/)
 */
export default class ImageDistanceParameters extends BaseImageMeasureParameters {
  constructor(properties?: ImageDistanceParametersProperties);
  /**
   * The angular unit used for angle calculation.
   *
   * @default "degrees"
   */
  accessor angularUnit: AngleUnit;
  /** A point that defines the from location of the distance and angle measurement. */
  get fromGeometry(): Point;
  set fromGeometry(value: PointProperties);
  /**
   * When `true`, this method calculates the 3D measurements for the distance and angle between two points on an image service.
   * The elevation surface will be incorporated when performing the calculations.
   * 3D calculation can only be done when the layer's [capabilities.mensuration.supports3D](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#capabilities) returns `true`.
   *
   * @default false
   */
  accessor is3D: boolean;
  /**
   * The linear unit used for distance calculation.
   *
   * @default "meters"
   */
  accessor linearUnit: LengthUnit;
  /** A point that defines the to location of the distance and angle measurement. */
  get toGeometry(): Point;
  set toGeometry(value: PointProperties);
  /** The string value representing the type of imagery mensuration. */
  readonly type: "distance-angle";
}