import type Extent from "../../geometry/Extent.js";
import type Multipoint from "../../geometry/Multipoint.js";
import type Point from "../../geometry/Point.js";
import type Polygon from "../../geometry/Polygon.js";
import type Polyline from "../../geometry/Polyline.js";
import type TimeExtent from "../../time/TimeExtent.js";
import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { ObjectId } from "../../views/types.js";
import type { PolylineProperties } from "../../geometry/Polyline.js";
import type { PolygonProperties } from "../../geometry/Polygon.js";
import type { PointProperties } from "../../geometry/Point.js";
import type { MultipointProperties } from "../../geometry/Multipoint.js";
import type { ExtentProperties } from "../../geometry/Extent.js";
import type { TimeExtentProperties } from "../../time/TimeExtent.js";

export interface ImageGPSInfoParametersProperties extends Partial<Pick<ImageGPSInfoParameters, "objectIds" | "spatialRelationship" | "where">> {
  /**
   * The geometry to query images. The spatial relationship as specified by [spatialRelationship](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageGPSInfoParameters/#spatialRelationship)
   * will indicate how the geometry should be used to query images.
   */
  geometry?: (ExtentProperties & { type: "extent" }) | (MultipointProperties & { type: "multipoint" }) | (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" }) | (PolylineProperties & { type: "polyline" }) | null;
  /** A time extent for a temporal query to query images. */
  timeExtent?: TimeExtentProperties | null;
}

/**
 * Image GPS info parameters for [ImageryLayer.queryGPSInfo()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#queryGPSInfo)
 * or [queryGPSInfo()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#queryGPSInfo) methods.
 *
 * @since 4.29
 * @see [ImageGPSInfoResult](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageGPSInfoResult/)
 * @see [ImageryLayer.queryGPSInfo()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#queryGPSInfo)
 * @see [queryGPSInfo()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#queryGPSInfo)
 */
export default class ImageGPSInfoParameters extends ImageGPSInfoParametersSuperclass {
  constructor(properties?: ImageGPSInfoParametersProperties);
  /**
   * The geometry to query images. The spatial relationship as specified by [spatialRelationship](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageGPSInfoParameters/#spatialRelationship)
   * will indicate how the geometry should be used to query images.
   */
  get geometry(): Extent | Multipoint | Point | Polygon | Polyline | null | undefined;
  set geometry(value: (ExtentProperties & { type: "extent" }) | (MultipointProperties & { type: "multipoint" }) | (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" }) | (PolylineProperties & { type: "polyline" }) | null | undefined);
  /** An array of ObjectIDs to be used to query images. */
  accessor objectIds: ObjectId[] | null | undefined;
  /**
   * For spatial queries, this parameter defines the spatial relationship to query image footprints
   * in the layer against the input [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageGPSInfoParameters/#geometry).
   *
   * @default "intersects"
   */
  spatialRelationship: "intersects" | "contains" | "crosses" | "disjoint" | "envelope-intersects" | "index-intersects" | "overlaps" | "touches" | "within" | "relation";
  /** A time extent for a temporal query to query images. */
  get timeExtent(): TimeExtent | null | undefined;
  set timeExtent(value: TimeExtentProperties | null | undefined);
  /** A where clause for the query. Any legal SQL where clause operating on the fields in the layer is allowed. */
  accessor where: string | null | undefined;
}
declare const ImageGPSInfoParametersSuperclass: typeof JSONSupport & typeof ClonableMixin