import type Point from "../../geometry/Point.js";
import type FeatureSet from "./FeatureSet.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { FeatureSetProperties } from "./FeatureSet.js";
import type { PointProperties } from "../../geometry/Point.js";

export interface ImageIdentifyResultProperties extends Partial<Pick<ImageIdentifyResult, "catalogItemVisibilities" | "name" | "objectId" | "properties" | "value">> {
  /**
   * The set of catalog items that overlap the input geometry. Catalog
   * Items are returned only when the image service source is a mosaic dataset.
   */
  catalogItems?: FeatureSetProperties | null;
  /** The identified location. */
  location?: PointProperties;
}

/**
 * The results from [imageService](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/).
 *
 * @since 4.20
 * @see [imageService](https://developers.arcgis.com/javascript/latest/references/core/rest/imageService/)
 * @see [ImageIdentifyParameters](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ImageIdentifyParameters/)
 */
export default class ImageIdentifyResult extends JSONSupport {
  constructor(properties?: ImageIdentifyResultProperties);
  /**
   * The set of catalog items that overlap the input geometry. Catalog
   * Items are returned only when the image service source is a mosaic dataset.
   */
  get catalogItems(): FeatureSet | null | undefined;
  set catalogItems(value: FeatureSetProperties | null | undefined);
  /**
   * The set of visible areas for the identified catalog items.
   * `CatalogItemVisibilities` are returned only when the image
   * service source is a mosaic dataset. Each element in the array
   * corresponds to the percentage contribution (to final mosaic in
   * given extent) of the item in `catalogItems`.
   */
  accessor catalogItemVisibilities: number[] | null | undefined;
  /** The identified location. */
  get location(): Point;
  set location(value: PointProperties);
  /** The identify property name. */
  accessor name: string | null | undefined;
  /** The identify property id. */
  accessor objectId: number | null | undefined;
  /** The attributes of the identified object. */
  accessor properties: Record<string, {
      Values: string[] | null | undefined;
      Attributes: Record<string, any> | null | undefined;
  }> | null | undefined;
  /** The identify image service pixel value. */
  accessor value: string | null | undefined;
}