import type Graphic from "@arcgis/core/Graphic.js";
import type { Icon } from "@esri/calcite-components/components/calcite-icon";
import type { EsriClipboard } from "@arcgis/core/applications/Components/clipboard.js";

/**
 * The definition of a custom paste operation.
 *
 * @internal
 */
export type CustomPasteCommand = {
  icon?: Icon["icon"];
  id: string;
  commandEnabled: (clipboard: EsriClipboard, selectedFeature?: Graphic | null) => boolean;
  label: (systemStrings: {
      componentLabel: string;
      noClipboardData: string;
      noPasteCommandsAvailable: string;
      pasteMultipleNotSupported: string;
      mixedGeometriesNotSupported: string;
      pasteAsMustHaveGeometry: string;
      clipboardContentsSingle: string;
      clipboardEmpty: string;
      clipboardContentsMany: string;
      clipboardContents: string;
      clipboardTooltip: string;
      pasteCommandChoices: string;
      pasteAsTitle: string;
      pasteMergeTitle: string;
      pasteTitle: string;
      cancel: string;
      close: string;
      tooManyCreateFeatures: string;
      tooManyCreateComplexFeatures: string;
      paste: string;
      pasteMany: string;
      attributesNotCopied: string;
      attributesSubtitle: string;
      preservethis: string;
      seeMergeOptions: string;
      selectionLabel: string;
      mergeOptionsTitle: string;
      features: string;
      mergeOptionsDesc: string;
      pasteWithAttributesLabel: string;
      preserved: string;
      pasteAppendTitle: string;
      pasteSubtractTitle: string;
      pasteAsDesc: string;
      pasteMergeDesc: string;
      pasteDesc: string;
      pasteAppendDesc: string;
      pasteSubtractDesc: string;
      choosefeature: string;
      next: string;
      updating: string;
      breadcrumb: string;
      back: string;
      noPasteItemsError: string;
      noChangeError: string;
      noSelectedError: string;
      noMatchingEditableLayers: string;
      deletesGeometryError: string;
      noGeometryError: string;
      unexpectedError: string;
      errorNoticeTitle: string;
      errorNoticeMessage: string;
      range: string;
      multipleFeaturesX: string;
  }, locale: string) => string;
  description: (systemStrings: {
      componentLabel: string;
      noClipboardData: string;
      noPasteCommandsAvailable: string;
      pasteMultipleNotSupported: string;
      mixedGeometriesNotSupported: string;
      pasteAsMustHaveGeometry: string;
      clipboardContentsSingle: string;
      clipboardEmpty: string;
      clipboardContentsMany: string;
      clipboardContents: string;
      clipboardTooltip: string;
      pasteCommandChoices: string;
      pasteAsTitle: string;
      pasteMergeTitle: string;
      pasteTitle: string;
      cancel: string;
      close: string;
      tooManyCreateFeatures: string;
      tooManyCreateComplexFeatures: string;
      paste: string;
      pasteMany: string;
      attributesNotCopied: string;
      attributesSubtitle: string;
      preservethis: string;
      seeMergeOptions: string;
      selectionLabel: string;
      mergeOptionsTitle: string;
      features: string;
      mergeOptionsDesc: string;
      pasteWithAttributesLabel: string;
      preserved: string;
      pasteAppendTitle: string;
      pasteSubtractTitle: string;
      pasteAsDesc: string;
      pasteMergeDesc: string;
      pasteDesc: string;
      pasteAppendDesc: string;
      pasteSubtractDesc: string;
      choosefeature: string;
      next: string;
      updating: string;
      breadcrumb: string;
      back: string;
      noPasteItemsError: string;
      noChangeError: string;
      noSelectedError: string;
      noMatchingEditableLayers: string;
      deletesGeometryError: string;
      noGeometryError: string;
      unexpectedError: string;
      errorNoticeTitle: string;
      errorNoticeMessage: string;
      range: string;
      multipleFeaturesX: string;
  }, locale: string) => string;
};