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

export abstract class RefineSelection extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      add: string;
      remove: string;
      featuresAdded: string;
      featuresRemoved: string;
      totalSelected: string;
      inputLayer: string;
      inputLayerTip: string;
      searchDistance: string;
      useSearchDistanceTootip: string;
      bufferLayer: string;
      sketchLayer: string;
  } & T9nMeta<{
      add: string;
      remove: string;
      featuresAdded: string;
      featuresRemoved: string;
      totalSelected: string;
      inputLayer: string;
      inputLayerTip: string;
      searchDistance: string;
      useSearchDistanceTootip: string;
      bufferLayer: string;
      sketchLayer: string;
  }>;
  /** esri/views/layers/FeatureLayerView: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html */
  accessor addresseeLayer: FeatureLayerView | undefined;
  /** 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;
  /** 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;
  /** Array of drawn graphics for refine selection */
  accessor drawnGraphicsArr: {
      drawnGraphic: Graphic | undefined;
      bufferGraphic: Graphic | 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 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;
  /** esri/geometry: https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html */
  accessor geometries: Geometry[] | undefined;
  /** esri/views/MapView: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html */
  accessor mapView: MapView | undefined;
  /**
   * boolean: when true buffer tools controls are enabled
   *
   * @default false
   */
  accessor searchDistanceEnabled: boolean;
  /** utils/interfaces/ISelectionSet: An array of user defined selection sets */
  accessor selectionSets: ISelectionSet[];
  /** 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;
  /** Emitted on demand when selection starts or ends. */
  readonly selectionLoadingChange: import("@arcgis/lumina").TargetedEvent<this, boolean>;
  /** Emitted on demand when selection sets change. */
  readonly selectionSetsChanged: import("@arcgis/lumina").TargetedEvent<this, ISelectionSet[]>;
  readonly "@eventTypes": {
    selectionLoadingChange: RefineSelection["selectionLoadingChange"]["detail"];
    selectionSetsChanged: RefineSelection["selectionSetsChanged"]["detail"];
  };
}