/// <reference path="../../index.d.ts" />
import type Portal from "@arcgis/core/portal/Portal.js";
import type Point from "@arcgis/core/geometry/Point.js";
import type { HeadingLevel } from "../types.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { T9nMeta } from "@arcgis/lumina/controllers";

/**
 * The Reverse Geocode List component displays a list of addresses obtained by reverse geocoding a given location.
 * This is the component behind the What's Here functionality in Map Viewer. This class was created for MV for 5.0,
 * but is internal for 5.0, and will be wider released at 5.1 or later.
 *
 * @internal
 */
export abstract class ArcgisReverseGeocodeList extends LitElement {
  /** @default false */
  accessor autoDestroyDisabled: boolean;
  /**
   * Indicates the heading level to use for the component title.
   *
   * @default 3
   */
  accessor headingLevel: HeadingLevel;
  /** @default false */
  accessor hideCoordinates: boolean;
  accessor location: Point | undefined;
  /**
   * Replace localized message strings with your own strings.
   *
   * _**Note**: Individual message keys may change between releases._
   */
  accessor messageOverrides: {
      coordinates?: string | undefined;
      copyAddress?: string | undefined;
      copyCoordinates?: string | undefined;
      label?: string | undefined;
      moreResults?: string | undefined;
      noResultsFound?: string | undefined;
      noResultFound?: string | undefined;
      noLocation?: string | undefined;
      showMoreResults?: string | undefined;
      untitledService?: string | undefined;
  };
  /** @internal */
  protected messages: Partial<{
      coordinates: string;
      copyAddress: string;
      copyCoordinates: string;
      label: string;
      moreResults: string;
      noResultsFound: string;
      noResultFound: string;
      noLocation: string;
      showMoreResults: string;
      untitledService: string;
  }> & T9nMeta<{
      coordinates: string;
      copyAddress: string;
      copyCoordinates: string;
      label: string;
      moreResults: string;
      noResultsFound: string;
      noResultFound: string;
      noLocation: string;
      showMoreResults: string;
      untitledService: string;
  }>;
  accessor portal: Portal;
  get reverseGeocodeResults(): null | undefined | ReverseGeocodeResult[];
  /** Permanently destroy the component. */
  destroy(): Promise<void>;
  readonly arcgisReverseGeocodeCopy: import("@arcgis/lumina").TargetedEvent<this, { data: string; }>;
  readonly arcgisReverseGeocodeResultsChange: import("@arcgis/lumina").TargetedEvent<this, void>;
  readonly "@eventTypes": {
    arcgisReverseGeocodeCopy: ArcgisReverseGeocodeList["arcgisReverseGeocodeCopy"]["detail"];
    arcgisReverseGeocodeResultsChange: ArcgisReverseGeocodeList["arcgisReverseGeocodeResultsChange"]["detail"];
  };
}

/** @internal */
export interface ReverseGeocodeResult {
  name: string;
  address?: string;
  url: string;
}