import type Extent from "../../geometry/Extent.js";
import type Polygon from "../../geometry/Polygon.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { PolygonProperties } from "../../geometry/Polygon.js";
import type { ExtentProperties } from "../../geometry/Extent.js";

export interface ImageBoundaryResultProperties extends Partial<Pick<ImageBoundaryResult, "area">> {
  /** The geometry that defines the boundary of the image service. */
  geometry?: (ExtentProperties & { type: "extent" }) | (PolygonProperties & { type: "polygon" });
}

/**
 * Image boundary query result for [ImageryLayer.queryBoundary()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#queryBoundary)
 * or [queryBoundary()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#queryBoundary) methods containing boundary geometry of an image service.
 *
 * @since 4.29
 * @see [ImageryLayer.queryBoundary()](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#queryBoundary)
 * @see [queryBoundary()](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/#queryBoundary)
 */
export default class ImageBoundaryResult extends JSONSupport {
  constructor(properties?: ImageBoundaryResultProperties);
  /** The area of the boundary geometry in square meters. */
  accessor area: number;
  /** The geometry that defines the boundary of the image service. */
  get geometry(): Extent | Polygon;
  set geometry(value: (ExtentProperties & { type: "extent" }) | (PolygonProperties & { type: "polygon" }));
}