import type Point from "../../geometry/Point.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { CameraInfoMixin, CameraInfoMixinProperties } from "./CameraInfoMixin.js";
import type { PointProperties } from "../../geometry/Point.js";

export interface ImageInspectionInfoProperties extends CameraInfoMixinProperties, Partial<Pick<ImageInspectionInfo, "cameraID" | "id" | "orientation" | "referenceUri">> {
  /** Image acquisition date represented in Linux Epoch time. */
  acquisitionDate?: (Date | number | string) | null;
  /** Image's center. */
  center?: PointProperties;
  /** Perspective center. */
  perspectiveCenter?: PointProperties | null;
}

/**
 * Image information for images returned as a result of running [ImageryLayer.findImages()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#findImages)
 * or [findImages()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#findImages) methods.
 *
 * @since 4.29
 * @see [FindImagesResult](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FindImagesResult/)
 * @see [FindImagesParameters](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FindImagesParameters/)
 * @see [ImageryLayer.findImages()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#findImages)
 * @see [findImages()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#findImages)
 */
export default class ImageInspectionInfo extends ImageInspectionInfoSuperclass {
  constructor(properties?: ImageInspectionInfoProperties);
  /** Image acquisition date represented in Linux Epoch time. */
  get acquisitionDate(): Date | null | undefined;
  set acquisitionDate(value: (Date | number | string) | null | undefined);
  /** Image's camera id. */
  accessor cameraID: string;
  /** Image's center. */
  get center(): Point;
  set center(value: PointProperties);
  /** Image id. */
  accessor id: number;
  /** Image's orientation along x, y, z axis. */
  accessor orientation: ImageInspectionInfoOrientation;
  /** Perspective center. */
  get perspectiveCenter(): Point | null | undefined;
  set perspectiveCenter(value: PointProperties | null | undefined);
  /** The relative reference to the image's uri. */
  accessor referenceUri: string;
}
declare const ImageInspectionInfoSuperclass: typeof JSONSupport & typeof CameraInfoMixin

/**
 * Image's orientation along x, y, z axis.
 *
 * @see [orientation](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageInspectionInfo/#orientation)
 */
export interface ImageInspectionInfoOrientation {
  /** Image rotation along the x axis. */
  omega: number;
  /** Image rotation along the y axis. */
  phi: number;
  /** Image rotation along the z axis. */
  kappa: number;
  /** Indicates if the rotation is clockwise. */
  clockwise: boolean;
}