/// <reference path="../../index.d.ts" />
import type OrientedImageryLayer from "@arcgis/core/layers/OrientedImageryLayer.js";
import type Point from "@arcgis/core/geometry/Point.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { ArcgisReferenceElement, IconName } from "../types.js";
import type { AbortOptions } from "../../utils/async-utils.js";
import type { MapViewOrSceneView } from "@arcgis/core/views/MapViewOrSceneView.js";
import type { Icon } from "@esri/calcite-components/components/calcite-icon";

/**
 * The Oriented Imagery Viewer component allows the user to explore and use their oriented images.
 *
 * @since 4.31
 */
export abstract class ArcgisOrientedImageryViewer extends LitElement {
  /**
   * If true, the component will not be destroyed automatically when it is
   * disconnected from the document. This is useful when you want to move the
   * component to a different place on the page, or temporarily hide it. If this
   * is set, make sure to call the [destroy()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-oriented-imagery-viewer/#destroy) method when you are done to
   * prevent memory leaks.
   *
   * @default false
   */
  accessor autoDestroyDisabled: boolean;
  /**
   * Toggles the visibility of the current footprint polygon associated with the selected image loaded in the viewer.
   * Current footprint coverage allows you to better understand how the images in the oriented imagery layer relate to the map.
   * The footprint of the image is symbolized with red fill on the map. If you zoom or pan in the oriented imagery viewer,
   * the footprint coverage graphic will update on the map to highlight the area on the map that is visible in the image.
   *
   * @default false
   */
  accessor currentCoverageVisible: boolean;
  /**
   * Indicates whether the data capture tools are enabled in the oriented imagery viewer for digitization.
   * When set to `true` , the data capture (edit) option will be visible on the digitizable overlayed feature layers available in the image overlays tab.
   * On clicking the data capture option, the digitization tools will appear at the bottom of the viewer once the overlay tab is closed.
   *
   * @default false
   * @since 4.32
   */
  accessor dataCaptureEnabled: boolean;
  /**
   * When `false`, the view click interaction is enabled for the oriented imagery viewer component. This allows users to pick a location on the map and display the best image to the viewer.
   * When `true` the view click interaction will be defaulted to map navigation.
   *
   * @default false
   */
  accessor disabled: boolean;
  /**
   * Indicates if the image gallery functionality is available in the component.
   * To visualize additional images of the same location, select the image gallery from the oriented imagery viewer.
   * The galley is a carousel of low-resolution thumbnails of all images that depict the selected map location. Click a thumbnail to view the full-resolution image in the oriented imagery viewer.
   *
   * @default false
   */
  accessor galleryOpened: boolean;
  /**
   * Indicates whether to display the header of the widget.
   *
   * @default false
   * @since 5.1
   */
  accessor hideHeader: boolean;
  /**
   * Indicates whether to display the action bar of the widget.
   *
   * @default false
   * @since 5.1
   */
  accessor hideMenu: boolean;
  /**
   * Icon which represents the component.
   * Typically used when the component is controlled by another component (e.g. by the Expand component).
   *
   * @default "oriented-imagery-widget"
   * @since 4.27
   * @see [Calcite Icons](https://developers.arcgis.com/calcite-design-system/icons/)
   */
  get icon(): Icon["icon"];
  set icon(value: IconName);
  /**
   * Indicates if the image enhancement tool is active. When `true` the component displays the functionalities to adjust the brightness, contrast, and sharpness of the
   * image in the oriented imagery viewer using interactive sliders.
   * Settings will be preserved for subsequent images loaded in the oriented imagery viewer.
   *
   * @default false
   */
  accessor imageEnhancementToolActive: boolean;
  /**
   * When `true`, the image gallery functionality is available in the component.
   * Image gallery currently only supports MRF and Tif image formats.
   *
   * @default false
   */
  get imageGalleryEnabled(): boolean;
  /**
   * Indicates whether the image overlays tab in the oriented imagery viewer is open.
   * When set to `true` , the overlays tab appears at the bottom of the viewer. It includes two toggle options: overlay camera locations and overlay map features.
   * These options enable users to visualize and overlay map features that intersect with the image’s footprint within the viewer.
   *
   * @default false
   * @since 4.32
   */
  accessor imageOverlaysOpened: boolean;
  /**
   * Indicates if the additional footprint polygons are visible for the selected image loaded in the viewer.
   * The footprint graphics (appearing in blue) show the coverage footprints of all the additional images in the
   * layer that depict the location selected by the user.
   *
   * @default false
   */
  accessor isAdditionalCoverageVisible: boolean;
  /**
   * Indicates if the additional camera locations are visible for the selected image loaded in the viewer.
   * The point location graphics (appearing in blue) show the camera locations for additional images that depict the location the user selects.
   *
   * @default false
   */
  accessor isAdditionalPointSourcesVisible: boolean;
  /**
   * The component's default label.
   *
   * @since 4.11
   */
  accessor label: string | null | undefined;
  /**
   * Specifies the current [OrientedImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/OrientedImageryLayer/) to use. The layer is one the component connects to and utilizes to populate the image.
   * The layer contains the feature data and oriented imagery properties required by the viewer to load the image and generate the associated graphics.
   *
   * > [!WARNING]
   * > Use `layer`, `mapLayerId`, and `orientedImageryLayerItemId` independently; only one should be set at a time.
   */
  accessor layer: OrientedImageryLayer | null | undefined;
  /**
   * Indicates if the map-image location tool is available in the component.
   * When `true`, the user can select a point on the map and the corresponding location in pixel space will be displayed in the image, and vice versa.
   *
   * @default false
   */
  accessor mapImageConversionToolState: boolean;
  /**
   * The layer ID of a Oriented Imagery Layer in the associated map.
   * When set, the component will attempt to find and use the layer with the provided ID from the map.
   *
   * > [!WARNING]
   * > Use `layer`, `mapLayerId`, and `orientedImageryLayerItemId` independently; only one should be set at a time.
   *
   * @since 5.1
   * @example
   * ```html
   * <arcgis-scene item-id="aa1c036445824e06a2d1b0e12e02a924">
   *   <arcgis-oriented-imagery-viewer slot="top-right" map-layer-id="1962adf1de1-layer-82"></arcgis-oriented-imagery-viewer>
   * </arcgis-scene>
   * ```
   */
  accessor mapLayerId: string | undefined;
  /**
   * When `true`, the navigation tool is available in the component.
   * The navigation tool can be used to explore the images that contain the selected location on the map using a compass.
   * To view a different image of the selected map location, click the camera locations (blue dots), or click a segment to view
   * the best image from that segment (segments with images are shown in white; segments without images are gray).
   *
   * @default false
   */
  accessor navigationToolActive: boolean;
  /**
   * The portal item ID of an Oriented Imagery Layer to load and use in the component.
   *
   * > [!WARNING]
   * > Use `layer`, `mapLayerId`, and `orientedImageryLayerItemId` independently; only one should be set at a time.
   */
  accessor orientedImageryLayerItemId: string | undefined;
  /**
   * When true, loading an image via directional or sequential navigation caches all neighboring images associated with that image.
   * Navigating to adjacent images then uses the cached assets, reducing load times and improving viewer performance.
   *
   * @default false
   * @since 5.0
   */
  accessor preloadMedia: boolean;
  /**
   * By assigning the `id` attribute of the Map or Scene component to this property, you can position a child component anywhere in the DOM while still maintaining a connection to the Map or Scene.
   *
   * @see [Associate components with a Map or Scene component](https://developers.arcgis.com/javascript/latest/programming-patterns/#associate-components-with-a-map-or-scene-component)
   */
  accessor referenceElement: ArcgisReferenceElement | string | undefined;
  /**
   * This property provides the location of an image pixel in Map coordinates when using map-image conversion tool.
   *
   * @since 4.29
   */
  get referencePoint(): Point | null;
  /**
   * The view associated with the component. 
   *   > **Note:** The recommended approach is to fully migrate applications to use map and scene components and avoid using MapView and SceneView directly. However, if you are migrating a large application from widgets to components, you might prefer a more gradual transition. To support this use case, the SDK includes this `view` property which connects a component to a MapView or SceneView. Ultimately, once migration is complete, the arcgis-oriented-imagery-viewer component will be associated with a map or scene component rather than using the `view` property.
   *
   * @since 4.30
   */
  accessor view: MapViewOrSceneView | null | undefined;
  /** Permanently destroy the component. */
  destroy(): Promise<void>;
  /**
   * Loads the best available image for a given map point and displays it in the viewer. The method takes a `Point` object as an argument, which represents the location on the map for which the best image should be loaded. The viewer will analyze the available images for that location and select the one that best matches the given location.
   *
   * @param mapPoint - The [point](https://developers.arcgis.com/javascript/latest/references/core/geometry/Point/) object representing the location on the map for which to load the best image.
   * @param options - Optional parameters for aborting the image loading process. This can be used to cancel the operation if it takes too long or if the user navigates away from the location before the image is loaded.
   * @since 5.1
   */
  loadBestImage(mapPoint: Point, options?: AbortOptions): Promise<void>;
  "@setterTypes": {
    icon?: IconName;
  };
  /** Emitted when the value of a property is changed. Use this to listen to changes to properties. */
  readonly arcgisPropertyChange: import("@arcgis/lumina").TargetedEvent<this, { name: "imageGalleryEnabled" | "layer"; }>;
  /** Emitted when the component associated with a map or scene view is ready to be interacted with. */
  readonly arcgisReady: import("@arcgis/lumina").TargetedEvent<this, void>;
  readonly "@eventTypes": {
    arcgisPropertyChange: ArcgisOrientedImageryViewer["arcgisPropertyChange"]["detail"];
    arcgisReady: ArcgisOrientedImageryViewer["arcgisReady"]["detail"];
  };
}