/// <reference path="../../index.d.ts" />
import type MapView from "@arcgis/core/views/MapView.js";
import type { IImageExtraction, ISearchConfiguration, ITextExtraction } from "../../utils/interfaces.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { ArcgisEditor } from "@arcgis/map-components/components/arcgis-editor/customElement";
import type { T9nMeta } from "@arcgis/lumina/controllers";

export abstract class CreateFeature extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      chooseCategoryMsg: string;
      provideDetailsMsg: string;
      provideLocationMsg: string;
      editLocationLabel: string;
      reportOutsideAreaMessage: string;
      enableFeatureTemplatesMessage: string;
      usePhoto: string;
      aiAssistantDescription: string;
      useDescription: string;
      aiTextAssistantDescription: string;
      fillOutManually: string;
      startBlank: string;
      next: string;
      cancel: string;
      createReportHeading: string;
      aiAssistedReport: string;
      manualReport: string;
      aiAssistantProcessingHint: string;
      aiTextProcessingHint: string;
      imageUploadLimitHint: string;
      replaceImage: string;
      analyzingImage: string;
      description: string;
      messageInputHint: string;
      descriptionRequiredHint: string;
      analyzingText: string;
      formReviewMsg: string;
      textReviewMsg: string;
      skip: string;
      photo: string;
      error: string;
      imageExtractionError: string;
      imageExtractionPartialError: string;
      textExtractionError: string;
      textExtractionPartialError: string;
  } & T9nMeta<{
      chooseCategoryMsg: string;
      provideDetailsMsg: string;
      provideLocationMsg: string;
      editLocationLabel: string;
      reportOutsideAreaMessage: string;
      enableFeatureTemplatesMessage: string;
      usePhoto: string;
      aiAssistantDescription: string;
      useDescription: string;
      aiTextAssistantDescription: string;
      fillOutManually: string;
      startBlank: string;
      next: string;
      cancel: string;
      createReportHeading: string;
      aiAssistedReport: string;
      manualReport: string;
      aiAssistantProcessingHint: string;
      aiTextProcessingHint: string;
      imageUploadLimitHint: string;
      replaceImage: string;
      analyzingImage: string;
      description: string;
      messageInputHint: string;
      descriptionRequiredHint: string;
      analyzingText: string;
      formReviewMsg: string;
      textReviewMsg: string;
      skip: string;
      photo: string;
      error: string;
      imageExtractionError: string;
      imageExtractionPartialError: string;
      textExtractionError: string;
      textExtractionPartialError: string;
  }>;
  /** array: Configured AI image extraction field and prompt for the selected LayerId */
  accessor aiImageExtraction: IImageExtraction[] | undefined;
  /** array: Configured AI text extraction field and prompt for the selected LayerId */
  accessor aiTextExtraction: ITextExtraction[] | undefined;
  /**
   * boolean: When true user can create multiple features
   *
   * @default false
   */
  accessor allowMultipleCreation: boolean;
  /** string: The name of Instant Apps application (e.g., "reporter", "manager") used in the request source header */
  accessor appName: string | undefined;
  /**
   * boolean: Set this to true when have a custom submit button in the app.
   * This will hide the header and footer elements of the editor and user needs to execute the submit method manually.
   *
   * @default false
   */
  accessor customizeSubmit: boolean | undefined;
  /**
   * boolean: When true message analysis attempts to extract and geocode location text
   *
   * @default false
   */
  accessor enableMessageLocation: boolean | undefined;
  /**
   * boolean: When true photo get location from the photo selected for AI image Extraction
   *
   * @default false
   */
  accessor enablePhotoLocation: boolean | undefined;
  /**
   * boolean: When true the Search box will be displayed
   *
   * @default false
   */
  accessor enableSearch: boolean | undefined;
  /**
   * When true the snapping options will be exposed
   *
   * @default false
   */
  accessor enableSnapping: boolean;
  /**
   * string: selected floor level
   *
   * @default ''
   */
  accessor floorLevel: string;
  /** string: selected floor level */
  accessor formElements: any;
  /**
   * boolean: When true the application will be in mobile mode, controls the mobile or desktop view
   *
   * @default false
   */
  accessor isMobile: boolean;
  /** esri/views/MapView: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html */
  accessor mapView: MapView | undefined;
  /**
   * boolean: When true clicking on a feature on the map will display a popup
   *
   * @default false
   */
  accessor popupEnabled: boolean;
  /**
   * boolean: When true reporting area layer should be honored if it exists
   *
   * @default false
   */
  accessor reportingArea: boolean;
  /**
   * string: polygon layer for the reporting feature
   *
   * @default ''
   */
  accessor reportingAreaLayer: string | undefined;
  /**
   * string: Message to be displayed when feature is outside the reportingAreaLayer
   *
   * @default ''
   */
  accessor reportingAreaMessage: string;
  /** ISearchConfiguration: Configuration details for the Search widget */
  accessor searchConfiguration: ISearchConfiguration | undefined;
  /**
   * string: Layer id of the feature layer in which the new feature is to be created
   *
   * @default ''
   */
  accessor selectedLayerId: string;
  /**
   * boolean: When true the notice message with the current state should be shown
   *
   * @default true
   */
  accessor showGuidingMsg: boolean | undefined;
  /**
   * boolean: When true the layer visibility message will be shown
   *
   * @default false
   */
  accessor showLayerVisibilityMsg: boolean | undefined;
  /**
   * boolean: When true Editor's sketch widgets will be displayed
   *
   * @default false
   */
  accessor showSketchWidgets: boolean;
  /**
   * string: Text to be displayed that will allow user to know they can submit new reports
   *
   * @default ''
   */
  accessor submitNewReportsMessage: string;
  /**
   * boolean: When true the map should shown in the editor component in mobile mode (while drawing graphic)
   *
   * @default false
   */
  accessor updateMapPosition: boolean;
  /**
   * Refreshes the editor state, optionally updating the floor level.
   *
   * @param floorLevel - (Optional) The floor level to set. If provided, the editor updates to this floor level.
   * @returns A promise that resolves when the refresh operation is complete.
   */
  refresh(floorLevel?: string): Promise<void>;
  /** Shows feature form */
  showForm(): Promise<void>;
  /**
   * Submit the created feature
   *
   * @returns Promise that resolves when the operation is complete
   */
  submit(): Promise<void>;
  /**
   * Emitted on demand when features are being created
   * The number of features being created is passed as an argument.
   */
  readonly activeFeatureCountChange: import("@arcgis/lumina").TargetedEvent<this, number>;
  /** Emitted on demand when the create feature component is closed */
  readonly createFeatureEditorClosed: import("@arcgis/lumina").TargetedEvent<this, void>;
  /**
   * Emitted once the editor for creating feature is initialized and ready to use
   * The ArcgisEditor instance is passed as an argument.
   */
  readonly createFeatureEditorInitialized: import("@arcgis/lumina").TargetedEvent<this, ArcgisEditor>;
  /** Emitted on demand when drawing is completed */
  readonly drawComplete: import("@arcgis/lumina").TargetedEvent<this, boolean>;
  /** Emitted on demand when editing attachments */
  readonly editingAttachment: import("@arcgis/lumina").TargetedEvent<this, boolean>;
  /** Emitted on demand when in editing mode */
  readonly editingLocation: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted on demand when the feature creation is failed */
  readonly fail: import("@arcgis/lumina").TargetedEvent<this, Error>;
  /** Emitted on switched form mobile to desktop or vice versa */
  readonly modeChanged: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted on demand when editor panel changes */
  readonly progressStatus: import("@arcgis/lumina").TargetedEvent<this, number>;
  /** Emitted on demand when the feature is created successfully */
  readonly success: import("@arcgis/lumina").TargetedEvent<this, void>;
  readonly "@eventTypes": {
    activeFeatureCountChange: CreateFeature["activeFeatureCountChange"]["detail"];
    createFeatureEditorClosed: CreateFeature["createFeatureEditorClosed"]["detail"];
    createFeatureEditorInitialized: CreateFeature["createFeatureEditorInitialized"]["detail"];
    drawComplete: CreateFeature["drawComplete"]["detail"];
    editingAttachment: CreateFeature["editingAttachment"]["detail"];
    editingLocation: CreateFeature["editingLocation"]["detail"];
    fail: CreateFeature["fail"]["detail"];
    modeChanged: CreateFeature["modeChanged"]["detail"];
    progressStatus: CreateFeature["progressStatus"]["detail"];
    success: CreateFeature["success"]["detail"];
  };
}