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

export interface ImageGPSInfoProperties extends JSONSupportMixinProperties, Partial<Pick<ImageGPSInfo, "cameraID" | "gps" | "id" | "name" | "orientation">> {
  /** Image acquisition date represented using Linux Epoch time. */
  acquisitionDate?: (Date | number | string) | null;
  /** Image's center. */
  center?: PointProperties;
}

/**
 * Image GPS information for images returned as a result of the [ImageryLayer#queryGPSInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#queryGPSInfo)
 * or [queryGPSInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#queryGPSInfo) methods.
 *
 * @since 4.29
 * @see [ImageGPSInfoResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageGPSInfoResult.html)
 * @see [ImageGPSInfoResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageGPSInfoResult.html)
 * @see [ImageryLayer#queryGPSInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#queryGPSInfo)
 * @see [queryGPSInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#queryGPSInfo)
 */
export default abstract class ImageGPSInfo extends JSONSupport {
  /** Image acquisition date represented using 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's GPS location. */
  accessor gps: {
      longitude: number;
      latitude: number;
      altitude: number;
  };
  /** Image id. */
  accessor id: number;
  /** Image name. */
  accessor name: string;
  /** Image's orientation. */
  accessor orientation: {
      omega: number;
      phi: number;
      kappa: number;
      clockwise: boolean;
  };
}