/// <reference path="../../index.d.ts" />
import type MapView from "@arcgis/core/views/MapView.js";
import type SimpleFillSymbol from "@arcgis/core/symbols/SimpleFillSymbol.js";
import type SimpleMarkerSymbol from "@arcgis/core/symbols/SimpleMarkerSymbol.js";
import type Geometry from "@arcgis/core/geometry/Geometry.js";
import type FeatureLayerView from "@arcgis/core/views/layers/FeatureLayerView.js";
import type SimpleLineSymbol from "@arcgis/core/symbols/SimpleLineSymbol.js";
import type { DistanceUnit, ISearchConfiguration, ISelectionSet } from "../../utils/interfaces.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { T9nMeta } from "@arcgis/lumina/controllers";

export abstract class MapSelectTools extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      listName: string;
      listNamePlaceholder: string;
      searchDistance: string;
      select: string;
      selectedFeatures: string;
      selectionLoading: string;
      sketch: string;
      bufferLayer: string;
      sketchLayer: string;
      useLayerFeatures: string;
      inputLayer: string;
      useLayerFeaturesTooltip: string;
      useSearchDistanceTootip: string;
      placeholder: string;
  } & T9nMeta<{
      listName: string;
      listNamePlaceholder: string;
      searchDistance: string;
      select: string;
      selectedFeatures: string;
      selectionLoading: string;
      sketch: string;
      bufferLayer: string;
      sketchLayer: string;
      useLayerFeatures: string;
      inputLayer: string;
      useLayerFeaturesTooltip: string;
      useSearchDistanceTootip: string;
      placeholder: string;
  }>;
  /** string | number[] |  object with r, g, b, a: https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html */
  accessor bufferColor: any;
  /** string | number[] | object with r, g, b, a: https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html */
  accessor bufferOutlineColor: any;
  /**
   * boolean: When true the user can define a name for each notification list
   *
   * @default false
   */
  accessor customLabelEnabled: boolean;
  /** number: The default value to show for the buffer distance */
  accessor defaultBufferDistance: number | undefined;
  /** number: The default value to show for the buffer unit */
  accessor defaultBufferUnit: DistanceUnit | undefined;
  /**
   * string[]: Optional list of enabled layer ids
   *  If empty all layers will be available
   */
  accessor enabledLayerIds: string[];
  /**
   * boolean: When true users will be allowed to optionally use features from a layer as the selection geometry
   *
   * @default true
   */
  accessor enableLayerFeatures: boolean;
  /**
   * boolean: When true the use features from a layer options will be enabled when the component loads
   *
   * @default false
   */
  accessor enableLayerFeaturesOnLoad: boolean;
  /**
   * boolean: When true users will be allowed to optionally create a buffer around the selection geometry
   *
   * @default true
   */
  accessor enableSearchDistance: boolean;
  /**
   * boolean: When true the serach distance options will be enabled when the component loads
   *
   * @default false
   */
  accessor enableSearchDistanceOnLoad: boolean;
  /**
   * boolean: When true sketch tools will be provided to allow users to draw a selection geometry
   *
   * @default true
   */
  accessor enableSketchTools: boolean;
  /** Geometry[]: List of geometries */
  accessor geometries: Geometry[];
  /**
   * string: Header label class
   *
   * @default 'font-bold'
   */
  accessor headerLabelClass: string;
  /**
   * boolean: When true a new label is not generated for the stored selection set
   *
   * @default false
   */
  accessor isUpdate: boolean;
  /** FeatureLayerView[]: List of layer views */
  accessor layerViews: FeatureLayerView[];
  /** MapView: The view of the map */
  accessor mapView: MapView | undefined;
  /**
   * string: The value to show for no results
   * when left empty the default text '0 selected features from {layerTitle}' will be shown
   *
   * @default ''
   */
  accessor noResultText: string;
  /** ISearchConfiguration: Configuration details for the Search widget */
  accessor searchConfiguration: ISearchConfiguration | undefined;
  /**
   * boolean: when true buffer tools controls are enabled
   *
   * @default false
   */
  accessor searchDistanceEnabled: boolean;
  /**
   * string[]: List of layer ids that should be shown as potential selection layers
   * when skectching with 'Use layer features' option
   */
  accessor selectionLayerIds: string[];
  /** utils/interfaces/ISelectionSet: Used to store key details about any selections that have been made. */
  accessor selectionSet: ISelectionSet | undefined;
  /** FeatureLayerView: The view of the selected layer */
  accessor selectLayerView: FeatureLayerView | undefined;
  /** esri/symbols/SimpleLineSymbol | JSON representation : https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html */
  accessor sketchLineSymbol: SimpleLineSymbol | undefined;
  /** esri/symbols/SimpleMarkerSymbol | JSON representation: https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html */
  accessor sketchPointSymbol: SimpleMarkerSymbol | undefined;
  /** esri/symbols/SimpleFillSymbol | JSON representation: https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html */
  accessor sketchPolygonSymbol: SimpleFillSymbol | undefined;
  /**
   * boolean: when true drawn graphics will be used to select features
   *
   * @default false
   */
  accessor useLayerFeaturesEnabled: boolean;
  /**
   * //--------------------------------------------------------------------------
   * //
   * //  Methods (public)
   * //
   * //--------------------------------------------------------------------------
   *
   * /**
   * Clear any selection results
   *
   * @returns Promise when the results have been cleared
   */
  clearSelection(): Promise<void>;
  /**
   * Get the new selection set
   *
   * @returns Promise with the new selection set
   */
  getSelection(): Promise<ISelectionSet>;
  /** Emitted on demand when the selection set changes. */
  readonly selectionSetChange: import("@arcgis/lumina").TargetedEvent<this, number>;
  readonly "@eventTypes": {
    selectionSetChange: MapSelectTools["selectionSetChange"]["detail"];
  };
}