/// <reference path="../../index.d.ts" />
import type Graphic from "@arcgis/core/Graphic.js";
import type FeatureLayer from "@arcgis/core/layers/FeatureLayer.js";
import type SubtypeGroupLayer from "@arcgis/core/layers/SubtypeGroupLayer.js";
import type SubtypeSublayer from "@arcgis/core/layers/support/SubtypeSublayer.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { GeometryUnion } from "@arcgis/core/geometry/types.js";
import type { SymbolUnion } from "@arcgis/core/symbols/types.js";

/**
 * The Feature Image component generates a feature swatch representing a
 * Feature.
 * The component can be configured to only generate a swatch, when the element
 * is within the visible scope of the page.
 *
 * @since 5.0
 * @internal
 */
export abstract class ArcgisFeatureImage extends LitElement {
  /** Specifies a symbol. In this mode, the swatch will simply be this symbols preview. */
  accessor actualSymbol: SymbolUnion | undefined;
  /** The graphic to generate the swatch for. */
  accessor graphic: Graphic | {
      geometry?: GeometryUnion;
      attributes: Record<string, unknown>;
      layer: FeatureLayer;
  } | undefined;
  /**
   * The generated thumbnail height
   *
   * @default 16
   */
  accessor heightInPixels: number;
  /** The layer to which the graphic belongs. This will be used to get the symbol for the feature (using the layer's renderer) */
  accessor layer: FeatureLayer | SubtypeGroupLayer | SubtypeSublayer | undefined;
  accessor minWidth: number | undefined;
  /** Symbol to use, if the layer is a Table */
  accessor tableSymbolIcon: SymbolUnion | undefined;
  /**
   * Specifies whether to use the shape of the feature. If set to false, then a simple symbol swatch will be used.
   *
   * @default false
   */
  accessor useTrueShape: boolean;
  /**
   * The generated thumbnail width
   *
   * @default 16
   */
  accessor widthInPixels: number;
}