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

export interface ImageInspectionInfoProperties extends JSONSupportMixinProperties, 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/api-reference/esri-layers-ImageryLayer.html#findImages)
 * or [findImages()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#findImages) methods.
 *
 * @since 4.29
 * @see [FindImagesResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindImagesResult.html)
 * @see [FindImagesParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindImagesParameters.html)
 * @see [ImageryLayer#findImages()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#findImages)
 * @see [findImages()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#findImages)
 */
export default abstract class ImageInspectionInfo extends ImageInspectionInfoSuperclass {
  /** 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

export interface ImageInspectionInfoOrientation {
  /** Indicates if the rotation is clockwise. */
  clockwise: boolean;
  /** Image rotation along the z axis. */
  kappa: number;
  /** Image rotation along the x axis. */
  omega: number;
  /** Image rotation along the y axis. */
  phi: number;
}