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

export abstract class MapDrawTools extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      sketchLayer: string;
      undo: string;
      redo: string;
  } & T9nMeta<{
      sketchLayer: string;
      undo: string;
      redo: string;
  }>;
  /**
   * boolean: sketch is used by multiple components...need a way to know who should respond...
   *
   * @default false
   */
  accessor active: boolean;
  /**
   * utils/interfaces: Controls how the draw tools are rendered
   *
   * SKETCH mode supports snapping
   * REFINE mode supports undo/redo
   *
   * @default 'SKETCH'
   */
  accessor drawMode: EDrawMode;
  /**
   * boolean: when true you will be able to make additional modifications to the sketched geometry
   *
   * @default true
   */
  accessor editGraphicsEnabled: boolean;
  /** esri/Graphic: https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html */
  accessor graphics: Graphic[];
  /** esri/views/View: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html */
  accessor mapView: MapView | undefined;
  /** SimpleMarkerSymbol: Point symbol used for sketching and updating point graphics */
  accessor pointSymbol: SimpleMarkerSymbol | undefined;
  /** SimpleFillSymbol: Polygon symbol used for sketching and updating polygon graphics */
  accessor polygonSymbol: SimpleFillSymbol | undefined;
  /** SimpleLineSymbol: Polyline symbol used for sketching and updating polyline graphics */
  accessor polylineSymbol: SimpleLineSymbol | undefined;
  /**
   * boolean: when enabled the user can redo the previous operation
   *
   * @default false
   */
  accessor redoEnabled: boolean;
  /**
   * boolean: when enabled the user can undo the previous operation
   *
   * @default false
   */
  accessor undoEnabled: boolean;
  /**
   * Clears the user drawn graphics
   *
   * @returns Promise that resolves when the operation is complete
   */
  clear(): Promise<void>;
  /**
   * Set the sketch widget to update mode with the current graphic
   *
   * @returns Promise that resolves when the operation is complete
   */
  updateGraphics(): Promise<void>;
  /** Emitted on demand when the redo action is clicked. */
  readonly drawRedo: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted on demand when the undo action is clicked. */
  readonly drawUndo: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted on demand when selection starts or ends. */
  readonly selectionLoadingChange: import("@arcgis/lumina").TargetedEvent<this, boolean>;
  /** Emitted on demand when the sketch graphics change. */
  readonly sketchGraphicsChange: import("@arcgis/lumina").TargetedEvent<this, ISketchGraphicsChange>;
  readonly "@eventTypes": {
    drawRedo: MapDrawTools["drawRedo"]["detail"];
    drawUndo: MapDrawTools["drawUndo"]["detail"];
    selectionLoadingChange: MapDrawTools["selectionLoadingChange"]["detail"];
    sketchGraphicsChange: MapDrawTools["sketchGraphicsChange"]["detail"];
  };
}