import type { JSONSupport } from "../../core/JSONSupport.js";

export interface ImageVolumeProperties extends Partial<Pick<ImageVolume, "area" | "cut" | "cutCellCount" | "fill" | "fillCellCount" | "maxZ" | "meanZ" | "minZ">> {}

/**
 * The [ImageryLayer.calculateVolume()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#calculateVolume)
 * method on [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html) returns
 * [ImageVolumeResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageVolumeResult.html) containing array of this class.
 *
 * @since 4.32
 * @see [ImageVolumeResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageVolumeResult.html)
 * @see [ImageVolumeParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageVolumeParameters.html)
 * @see [ImageryLayer.calculateVolume()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#calculateVolume)
 */
export default class ImageVolume extends JSONSupport {
  constructor(properties?: ImageVolumeProperties);
  /** Area of the surface. Unit is square meters. */
  accessor area: number;
  /** The cut volume. Unit is cubic meters. */
  accessor cut: number;
  /** Cut cell count. */
  accessor cutCellCount: number | null | undefined;
  /** The fill volume (negative). Unit is cubic meters. */
  accessor fill: number;
  /** Fill cell count. */
  accessor fillCellCount: number | null | undefined;
  /** Maximum z of the surface perimeter. Unit is meter. */
  accessor maxZ: number;
  /** Average z of the surface perimeter. Unit is meter. */
  accessor meanZ: number;
  /** Minimum z of the surface perimeter. Unit is meter. */
  accessor minZ: number;
}