import type Accessor from "../../../../core/Accessor.js";
import type { VolumeMeasureType } from "../../../../analysis/VolumeMeasurement/types.js";
import type { Area, Length, Volume } from "../../../../core/quantity.js";

export interface VolumeMeasurementResultProperties {
  /** Volume measure type. */
  measureType?: VolumeMeasureType;
}

/**
 * Result obtained from a [VolumeMeasurementAnalysisView3D.result](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-VolumeMeasurementAnalysisView3D.html#result).
 *
 * If the result is unavailable, the [VolumeMeasurementAnalysisView3D.error](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-VolumeMeasurementAnalysisView3D.html#error) property provides the details on the cause.
 *
 * @since 4.34
 * @see [VolumeMeasurementAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-VolumeMeasurementAnalysis.html)
 * @see [VolumeMeasurementAnalysisView3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-VolumeMeasurementAnalysisView3D.html)
 * @see [Sample - Volume measurement analysis object](https://developers.arcgis.com/javascript/latest/sample-code/analysis-volume-measurement/)
 */
export default class VolumeMeasurementResult extends Accessor {
  constructor(properties?: VolumeMeasurementResultProperties);
  /** The area of the measured volume. */
  get area(): Area | null | undefined;
  /** Volume that needs to be removed to reach the target surface defined by the polygon. */
  get cutVolume(): Volume | null | undefined;
  /** Volume that needs to be added to reach the target surface defined by the polygon. */
  get fillVolume(): Volume | null | undefined;
  /** Volume measure type. */
  get measureType(): VolumeMeasureType;
  /**
   * Difference between the cut volume and fill volume.
   * A positive value indicates a surplus volume that needs to be removed.
   */
  get netVolume(): Volume | null | undefined;
  /** The perimeter of the measured volume. */
  get perimeter(): Length | null | undefined;
  /** Sum of the cut volume and fill volume. */
  get totalVolume(): Volume | null | undefined;
}