import type Accessor from "@arcgis/core/core/Accessor.js";
import type MapView from "@arcgis/core/views/MapView.js";
import type SceneView from "@arcgis/core/views/SceneView.js";
import type GraphicsLayer from "@arcgis/core/layers/GraphicsLayer.js";
import type { EsriClipboard } from "@arcgis/core/applications/Components/clipboard.js";

/** @internal */
export type ClipboardStageChangedReason = "clipboard-contents-changed" | "completed" | "contents-moved" | "suspended";

/**
 * ClipboardMove is used as an interactive operation for moving all the features on the clipboard
 * It will be suspended when on the FeatureForm view, as at that stage the graphics on the form are set
 * It can be set to work continuously, which means that it automatically starts a move again, after completing a move.
 *
 * @internal
 */
export class ClipboardMove extends Accessor {
  accessor clipboard: EsriClipboard;
  /** @default false */
  accessor continuous: boolean;
  accessor graphicsLayer: GraphicsLayer;
  stateChanged: ((reason: ClipboardStageChangedReason) => void) | null;
  accessor suspended: boolean;
  accessor view: MapView | SceneView;
  cancel(): void;
  clipboardContentsChanged(): void;
  start(): void;
}