/// <reference path="../../index.d.ts" />
import type Graphic from "@arcgis/core/Graphic.js";
import type MapView from "@arcgis/core/views/MapView.js";
import type { ILayerItemsHash, IReportingOptions } from "../../utils/interfaces.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";

export abstract class FeatureDetails extends LitElement {
  /**
   * When true the snapping options will be exposed
   *
   * @default false
   */
  accessor enableSnapping: boolean;
  /** esri/Graphic: https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html */
  accessor graphics: Graphic[];
  /** ILayerItemsHash: LayerDetailsHash for each layer in the map */
  accessor layerItemsHash: ILayerItemsHash | undefined;
  /** esri/views/MapView: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html */
  accessor mapView: MapView | undefined;
  /** IReportingOptions: Key options for reporting */
  accessor reportingOptions: IReportingOptions | undefined;
  /**
   * boolean: When false comment will shown in single line in the comments list
   *
   * @default true
   */
  accessor showFullCommentTitle: boolean;
  /**
   * boolean: When true the profile image of the comment creator will be shown in the comments list
   *
   * @default false
   */
  accessor showUserImageInCommentsList: boolean;
  /** Go to the previous feature in the features widget */
  back(): Promise<void>;
  /** Go to the next feature in the features widget */
  next(): Promise<void>;
  /**
   * Refresh the features comments which will fetch like, dislike and update the component
   *
   * @param graphic
   * @returns Promise that resolves when the operation is complete
   */
  refresh(graphic?: Graphic): Promise<void>;
  /** Toggle the visibility of the features list view */
  toggleListView(): Promise<void>;
  /** Emitted on demand when comment icon is clicked */
  readonly addComment: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted on demand when comment is clicked using the feature-list */
  readonly commentClick: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted on demand when comment is selected using the feature-list */
  readonly commentSelect: import("@arcgis/lumina").TargetedEvent<this, Graphic>;
  /** Emitted on demand when the selected index changes */
  readonly featureSelectionChange: import("@arcgis/lumina").TargetedEvent<this, {
      selectedFeature: Graphic[];
      selectedFeatureIndex: number;
  }>;
  /** Emitted on demand when like or dislike button is clicked */
  readonly likeOrDislikeClicked: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted on demand when like or dislike button is clicked */
  readonly loadingStatus: import("@arcgis/lumina").TargetedEvent<this, boolean>;
  readonly "@eventTypes": {
    addComment: FeatureDetails["addComment"]["detail"];
    commentClick: FeatureDetails["commentClick"]["detail"];
    commentSelect: FeatureDetails["commentSelect"]["detail"];
    featureSelectionChange: FeatureDetails["featureSelectionChange"]["detail"];
    likeOrDislikeClicked: FeatureDetails["likeOrDislikeClicked"]["detail"];
    loadingStatus: FeatureDetails["loadingStatus"]["detail"];
  };
}