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

export interface RasterSensorInfoProperties extends Partial<Pick<RasterSensorInfo, "cloudCover" | "productName" | "sensorAzimuth" | "sensorElevation" | "sensorName" | "sunAzimuth" | "sunElevation">> {
  /** The acquisition date. */
  acquisitionDate?: (Date | number | string) | null;
}

/**
 * The `RasterSensorInfo` class provides additional information on the raster sensor associated with 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).
 * This information includes sensor name, product name, imagery acquisition date, cloud coverage,
 * sun and sensor elevation and azimuth angle.
 *
 * @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 RasterSensorInfo extends JSONSupport {
  constructor(properties?: RasterSensorInfoProperties);
  /** The acquisition date. */
  get acquisitionDate(): Date | null | undefined;
  set acquisitionDate(value: (Date | number | string) | null | undefined);
  /** The cloud coverage (0-1). */
  accessor cloudCover: number | null | undefined;
  /** The satellite product name. */
  accessor productName: string | null | undefined;
  /** The sensor azimuth. */
  accessor sensorAzimuth: number | null | undefined;
  /** The sensor elevation. */
  accessor sensorElevation: number | null | undefined;
  /** The sensor name. */
  accessor sensorName: string;
  /** The sun azimuth. */
  accessor sunAzimuth: number | null | undefined;
  /** The sun elevation. */
  accessor sunElevation: number | null | undefined;
  /**
   * Creates a deep clone of the raster sensor info object.
   *
   * @returns A deep clone of the object that
   *                                                      invoked this method.
   *
   * // Creates a deep clone of the layer.rasterInfo.sensorInfo
   * let sensorInfo = layer.rasterInfo.sensorInfo.clone();
   */
  clone(): RasterSensorInfo;
}