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

export interface ImageHeightParametersProperties extends BaseImageMeasureParametersProperties, Partial<Pick<ImageHeightParameters, "linearUnit" | "operationType">> {
  /** A point that defines the from location of the height measurement. */
  fromGeometry?: PointProperties;
  /** A point that defines the to location of the height measurement. */
  toGeometry?: PointProperties;
}

/**
 * Input parameters used by the [ImageryLayer.measureHeight()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#measureHeight)
 * or [measureHeight()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#measureHeight) methods to perform imagery
 * height mensuration.
 *
 * @since 4.26
 * @see [ImageryLayer.measureHeight()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#measureHeight)
 * @see [measureHeight()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#measureHeight)
 * @see [ImageHeightResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHeightResult.html)
 */
export default class ImageHeightParameters extends BaseImageMeasureParameters {
  constructor(properties?: ImageHeightParametersProperties);
  /** A point that defines the from location of the height measurement. */
  get fromGeometry(): Point;
  set fromGeometry(value: PointProperties);
  /**
   * Linear unit used for height calculation.
   *
   * @default "meters"
   */
  accessor linearUnit: LengthUnit;
  /**
   * Determines how the height will be measured when the sensor info is available.
   *
   * Property | Description
   * ---------|------------
   * base-and-top | Calculates the height of a ground feature by measuring from the base of the object to the top of the object. Measurements are assumed to be perpendicular to the base; therefore, the line being measured along the building must have its endpoint directly above the start point.
   * base-and-top-shadow | Calculates the height of a feature by measuring from the base of the object to the top of the object's shadow on the ground. The point in the shadow must represent a point on the visible object that is perpendicular to the base.
   * top-and-top-shadow | Calculates the height of a feature by measuring from the top of the object to the top of the objects's shadow on the ground. The measurement points on the object and its shadow must represent the same point.
   *
   * @default "base-and-top"
   */
  accessor operationType: "base-and-top" | "base-and-top-shadow" | "top-and-top-shadow";
  /** A point that defines the to location of the height measurement. */
  get toGeometry(): Point;
  set toGeometry(value: PointProperties);
  /** The string value representing the type of imagery mensuration. */
  readonly type: "height";
}