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

export interface VoxelVolumeProperties {}

export type VolumeType = "xyz" | "xyzt" | "xyt";

/**
 * The VoxelVolume exposes properties that describe the volume and methods to convert to and from voxel space.
 *
 * @since 4.25
 * @see [VoxelLayer Volume](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VoxelLayer.html#voxellayer-volume)
 * @see [Sample - Explore a VoxelLayer using dynamic section](https://developers.arcgis.com/javascript/latest/sample-code/layers-voxel-dynamic-sections/)
 * @see [Sample - Create area of interest for VoxelLayer](https://developers.arcgis.com/javascript/latest/sample-code/layers-voxel-slices/)
 */
export default class VoxelVolume extends JSONSupport {
  constructor(properties?: VoxelVolumeProperties);
  /**
   * The unique identifier for the volume.
   *
   * @default 0
   */
  get id(): number;
  /** A 3-component array containing the volume size in voxels. For XYZ and XYZT volumes the returned values are [x, y, z]. For XYT volumes the returned values are [x, y, t] where t represents the number of times in the volume which are represented along the z dimension. */
  get sizeInVoxels(): [
      number,
      number,
      number
  ];
  /** Returns the type of the current variable's volume. */
  get volumeType(): VolumeType;
  /**
   * Convert a position in voxel space to the spatialReference of the layer.
   *
   * @param posInVoxelSpace - The voxel space position to convert to layer space as as [x, y, z].
   * @returns Returns a point in the layer's spatial reference. For XYT volumes returns an XY point and for XYZ and XYZT volumes returns an XYZ point.
   */
  computeLayerSpaceLocation(posInVoxelSpace: [
      number,
      number,
      number
  ]): Point;
  /**
   * Convert a position from the layer's spatialReference to voxel space for XYZ or XYZT volumes.
   *
   * @param pos - The XYZ position in the voxel layer spatial reference to convert to voxel space.
   * @returns Returns a 3-component array containing the position in voxel space as [x, y, z].
   */
  computeVoxelSpaceLocation(pos: Point): [
      number,
      number,
      number
  ];
}