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 { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.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";

export interface MapToImageParametersProperties extends Partial<Pick<MapToImageParameters, "rasterId" | "visibleOnly">> {
  /** The geometry in a map space (coordinates). */
  geometry?: (ExtentProperties & { type: "extent" }) | (MultipointProperties & { type: "multipoint" }) | (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" }) | (PolylineProperties & { type: "polyline" }) | null;
}

/**
 * Input parameters for the [ImageryLayer.mapToImage()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#mapToImage)
 * or [mapToImage()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#mapToImage) methods.
 *
 * @since 4.29
 * @see [ImageryLayer.mapToImage()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#mapToImage)
 * @see [mapToImage()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#mapToImage)
 */
export default class MapToImageParameters extends MapToImageParametersSuperclass {
  constructor(properties?: MapToImageParametersProperties);
  /** The geometry in a map space (coordinates). */
  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);
  /**
   * The raster id of the raster item corresponding to the input [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/MapToImageParameters/#geometry).
   * The output geometry parameter will use the image coordinate system of the specified raster item.
   */
  accessor rasterId: number;
  /**
   * When `true`, the operation will return an empty geometry if the input geometry is not visible.
   *
   * @default false
   */
  accessor visibleOnly: boolean;
}
declare const MapToImageParametersSuperclass: typeof JSONSupport & typeof ClonableMixin