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

export interface RasterBandInfoProperties extends Partial<Pick<RasterBandInfo, "maxWavelength" | "minWavelength" | "name" | "radianceBias" | "radianceGain" | "reflectanceBias" | "reflectanceGain" | "solarIrradiance">> {}

/**
 * `RasterBandInfo` class provides additional information for each raster band in an image service
 * referenced by [ImageryLayer.serviceRasterInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#serviceRasterInfo) or
 * [ImageryTileLayer.serviceRasterInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryTileLayer/#serviceRasterInfo). A band is represented by a single matrix of
 * pixel values, and a raster with multiple bands contains multiple spatially coincident matrices of
 * pixel values representing the same spatial area. Image services can include information such as the
 * band name, band index value, wavelength range, the radiance gain, radiance bias, and solar irradiance. All other raster
 * datasets will only contain the band index value.
 *
 * @since 4.27
 * @see [RasterInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/support/RasterInfo/)
 * @see [ImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/)
 * @see [ImageryTileLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryTileLayer/)
 * @see [Raster info](https://developers.arcgis.com/rest/services-reference/raster-info.htm)
 */
export default class RasterBandInfo extends JSONSupport {
  constructor(properties?: RasterBandInfoProperties);
  /** The maximum wavelength of the band. */
  accessor maxWavelength: number | null | undefined;
  /** The minimum wavelength of the band. */
  accessor minWavelength: number | null | undefined;
  /** The name of the band. */
  accessor name: string;
  /** The radiance bias of the band. */
  accessor radianceBias: number | null | undefined;
  /** The radiance gain of the band. */
  accessor radianceGain: number | null | undefined;
  /** The reflectance bias of the band. */
  accessor reflectanceBias: number | null | undefined;
  /** The reflectance gain of the band. */
  accessor reflectanceGain: number | null | undefined;
  /** The solar irradiance of the band. */
  accessor solarIrradiance: number | null | undefined;
  /**
   * Creates a deep clone of the raster band info object.
   *
   * @returns A deep clone of the object that
   *                                                      invoked this method.
   *
   * // Creates a deep clone of the layer.rasterInfo.bandInfos[0]
   * let bandInfo = layer.rasterInfo.bandInfos[0].clone();
   */
  clone(): RasterBandInfo;
}