/// <reference path="../../index.d.ts" />
import type MapView from "@arcgis/core/views/MapView.js";
import type { IImageExtraction, ILayerExpression, IMapInfo, IReportingOptions, ISearchConfiguration, ISortFields, ITextExtraction, theme } from "../../utils/interfaces.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { T9nMeta } from "@arcgis/lumina/controllers";

export abstract class CrowdsourceReporter extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      createReportButtonText: string;
      share: string;
      sort: string;
      filter: string;
      expand: string;
      collapse: string;
      next: string;
      submit: string;
      cancel: string;
      back: string;
      error: string;
      invalidConfigurationErrorMsg: string;
      chooseCategoryMsg: string;
      featureErrorMsg: string;
      currentLocationMsg: string;
      addLocationMsg: string;
      submitMsg: string;
      filterLayerTitle: string;
      indexOfTotal: string;
      comment: string;
      commentSubmittedMsg: string;
      addingCommentFailedMsg: string;
      sortNewest: string;
      sortOldest: string;
      sortHighestVoted: string;
      sortLowestVoted: string;
      sortAlphabetical: string;
      reverseSortAlphabetical: string;
      resetFilter: string;
      close: string;
      submitBelow: string;
      noResultsMsg: string;
      loading: string;
      notification: string;
      sortOptions: string;
      toggleListView: string;
  } & T9nMeta<{
      createReportButtonText: string;
      share: string;
      sort: string;
      filter: string;
      expand: string;
      collapse: string;
      next: string;
      submit: string;
      cancel: string;
      back: string;
      error: string;
      invalidConfigurationErrorMsg: string;
      chooseCategoryMsg: string;
      featureErrorMsg: string;
      currentLocationMsg: string;
      addLocationMsg: string;
      submitMsg: string;
      filterLayerTitle: string;
      indexOfTotal: string;
      comment: string;
      commentSubmittedMsg: string;
      addingCommentFailedMsg: string;
      sortNewest: string;
      sortOldest: string;
      sortHighestVoted: string;
      sortLowestVoted: string;
      sortAlphabetical: string;
      reverseSortAlphabetical: string;
      resetFilter: string;
      close: string;
      submitBelow: string;
      noResultsMsg: string;
      loading: string;
      notification: string;
      sortOptions: string;
      toggleListView: string;
  }>;
  /** array: Configured AI image extraction field and prompt for the selected LayerId */
  accessor aiImageExtraction: IImageExtraction[];
  /** array: Configured AI text extraction field and prompt for the selected LayerId */
  accessor aiTextExtraction: ITextExtraction[];
  /**
   * string: Semicolon delimited numbers that will be used as the maps center point from URL params
   *
   * @default ''
   */
  accessor center: string;
  /**
   * string: User configurable text to display for the comment button
   *
   * @default ''
   */
  accessor commentButtonText: string;
  /**
   * string: User configurable message to display when a comment is submitted
   *
   * @default ''
   */
  accessor commentSubmittedMessage: string;
  /**
   * string: Item ID of the web map that should be selected by default
   *
   * @default ''
   */
  accessor defaultWebmap: string;
  /**
   * string: The text that will display under the title on the landing page
   *
   * @default ''
   */
  accessor description: string;
  /**
   * boolean: When true the anonymous users will be allowed to submit reports and comments
   *
   * @default false
   */
  accessor enableAnonymousAccess: boolean;
  /**
   * boolean: When true the anonymous users will be allowed to submit comments
   *
   * @default false
   */
  accessor enableAnonymousComments: boolean;
  /**
   * boolean: When true the user will be allowed to submit comments
   *
   * @default false
   */
  accessor enableComments: boolean;
  /**
   * boolean: when true the home widget will be available
   *
   * @default true
   */
  accessor enableHome: boolean;
  /**
   * boolean: When true the user will be provided a login page
   *
   * @default false
   */
  accessor enableLogin: boolean;
  /**
   * boolean: When true photo get location from the message selected for AI text Extraction
   *
   * @default false
   */
  accessor enableMessageLocation: boolean;
  /**
   * boolean: When true the user will be allowed to submit new reports
   *
   * @default false
   */
  accessor enableNewReports: boolean;
  /**
   * boolean: When true photo get location from the photo selected for AI image Extraction
   *
   * @default false
   */
  accessor enablePhotoLocation: boolean;
  /**
   * boolean: when true the search widget will be available
   *
   * @default true
   */
  accessor enableSearch: boolean;
  /**
   * When true the snapping options will be exposed
   *
   * @default false
   */
  accessor enableSnapping: boolean;
  /**
   * boolean: when true the zoom widget will be available
   *
   * @default true
   */
  accessor enableZoom: boolean;
  /**
   * boolean: When true only the features from current extent will be shown
   *
   * @default false
   */
  accessor filterByMapExtent: boolean;
  /**
   * string: selected floor level
   *
   * @default ''
   */
  accessor floorLevel: string;
  /**
   * boolean: When true the application will be in mobile mode, controls the mobile or desktop view
   *
   * @default false
   */
  accessor isMobile: boolean;
  /** ILayerExpression[]: Array of layer expressions for layers (filter configuration) */
  accessor layerExpressions: ILayerExpression[];
  /**
   * string: Layer id of the feature from URL params
   *
   * @default ''
   */
  accessor layerId: string;
  /**
   * string: Id of the zoom level from URL params
   *
   * @default ''
   */
  accessor level: string;
  /**
   * string: The text that will display at the top of the landing page
   *
   * @default ''
   */
  accessor loginTitle: string;
  /** IMapInfo[]: array of map infos (name and id) */
  accessor mapInfos: IMapInfo[];
  /** esri/views/MapView: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html */
  accessor mapView: MapView | undefined;
  /**
   * string: Object id of the feature from URL params
   *
   * @default ''
   */
  accessor objectId: string;
  /**
   * string: The word(s) to display in the reports submit button
   *
   * @default ''
   */
  accessor reportButtonText: string;
  /**
   * boolean: When true reporting area layer should be honored if it exists
   *
   * @default false
   */
  accessor reportingArea: boolean;
  /**
   * string: Reporting polyon layer for creating feature
   *
   * @default ''
   */
  accessor reportingAreaLayer: string;
  /**
   * string: Message to be displayed when feature is outside the reportingAreaLayer
   *
   * @default ''
   */
  accessor reportingAreaMessage: string;
  /** IReportingOptions: Key options for reporting */
  accessor reportingOptions: IReportingOptions | undefined;
  /**
   * string: The word(s) to display in the reports header
   *
   * @default ''
   */
  accessor reportsHeader: string;
  /**
   * string: The message to display when the report has been submitted
   *
   * @default ''
   */
  accessor reportSubmittedMessage: string;
  /** ISearchConfiguration: Configuration details for the Search widget */
  accessor searchConfiguration: ISearchConfiguration | undefined;
  /**
   * boolean: When true the comments from all users will be visible
   *
   * @default false
   */
  accessor showComments: boolean;
  /**
   * boolean: When true the feature symbology of the feature will shown in the features list
   *
   * @default false
   */
  accessor showFeatureSymbol: boolean;
  /**
   * boolean: When false comment will shown in single line in the comments list
   *
   * @default true
   */
  accessor showFullCommentTitle: boolean;
  /**
   * boolean: To show only those features which are created by the logged in user
   *
   * @default false
   */
  accessor showMyReportsOnly: boolean | undefined;
  /**
   * boolean: When true the profile image of the comment creator will be shown in the comments list
   *
   * @default false
   */
  accessor showUserImageInCommentsList: boolean;
  /** ISortFields: Configuration for sorting fields */
  accessor sortFields: ISortFields | undefined;
  /**
   * string: sorting option to show the feature list
   *
   * @default 'newest'
   */
  accessor sortOption: string;
  /**
   * string: Text to be displayed that will allow user to know they can submit new reports
   *
   * @default ''
   */
  accessor submitNewReportsMessage: string;
  /**
   * theme: light | dark theme to be used
   *
   * @default 'light'
   */
  accessor theme: theme;
  /**
   * number: default scale to zoom to when zooming to a single point feature
   *
   * @default 15358
   */
  accessor zoomToScale: number;
  /**
   * Method to update layerExpressions with the translated values
   *
   * @param t9nLayerExpressions
   */
  updateLayerExpressionsT9n(t9nLayerExpressions: ILayerExpression[]): Promise<void>;
  /** Emitted when toggle panel button is clicked in reporter */
  readonly togglePanel: import("@arcgis/lumina").TargetedEvent<this, {
      panelState: boolean;
      isFormOpen: boolean;
  }>;
  readonly "@eventTypes": {
    togglePanel: CrowdsourceReporter["togglePanel"]["detail"];
  };
}