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 SpatialReference from "../../geometry/SpatialReference.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 { SpatialReferenceProperties } from "../../geometry/SpatialReference.js";

export interface ImageToMapParametersProperties extends Partial<Pick<ImageToMapParameters, "adjust" | "depthOffset" | "rasterId">> {
  /** The geometry in an image space. */
  geometry?: (MultipointProperties & { type: "multipoint" }) | (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" }) | (PolylineProperties & { type: "polyline" });
  /**
   * The spatial reference for the output geometry. If not specified, the spatial
   * reference of the image service is used.
   */
  outSpatialReference?: SpatialReferenceProperties | null;
}

/**
 * Input parameters for the [ImageryLayer.imageToMap()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#imageToMap)
 * or [imageToMap()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#imageToMap) methods.
 *
 * @since 4.29
 * @see [ImageryLayer.imageToMap()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#imageToMap)
 * @see [imageToMap()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#imageToMap)
 */
export default class ImageToMapParameters extends ImageToMapParametersSuperclass {
  constructor(properties?: ImageToMapParametersProperties);
  /**
   * When `true`, it will adjust the background vertices to be in the foreground.
   *
   * @default false
   */
  accessor adjust: boolean;
  /**
   * The depth offset.
   *
   * @default 0
   */
  accessor depthOffset: number;
  /** The geometry in an image space. */
  get geometry(): Multipoint | Point | Polygon | Polyline;
  set geometry(value: (MultipointProperties & { type: "multipoint" }) | (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" }) | (PolylineProperties & { type: "polyline" }));
  /**
   * The spatial reference for the output geometry. If not specified, the spatial
   * reference of the image service is used.
   */
  get outSpatialReference(): SpatialReference | null | undefined;
  set outSpatialReference(value: SpatialReferenceProperties | null | undefined);
  /** The corresponding raster id for the input [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageToMapParameters/#geometry). */
  accessor rasterId: number;
}
declare const ImageToMapParametersSuperclass: typeof JSONSupport & typeof ClonableMixin