import type Accessor from "../../core/Accessor.js";
import type SharedTemplateMetadata from "../sharedTemplates/SharedTemplateMetadata.js";
import type FeatureTemplate from "../../layers/support/FeatureTemplate.js";
import type { LayerWithFeatureTemplatesUnion } from "../../layers/types.js";

export interface TemplateListItemProperties extends Partial<Pick<TemplateListItem, "layer" | "template" | "thumbnail">> {}

/**
 * The item displayed within the FeatureTemplates component.
 *
 * @since 5.1
 */
export default class TemplateListItem extends Accessor {
  /** @since 5.1 */
  constructor(properties?: TemplateListItemProperties);
  /**
   * The description that is displayed for the template item.
   * This defaults to the [FeatureTemplate.description](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureTemplate/#description) property of the template.
   *
   * @since 5.1
   */
  get description(): string;
  /**
   * Unique identifier for the template item.
   *
   * @since 5.1
   */
  get id(): string;
  /**
   * The label that is displayed for the template item.
   *
   * @since 5.1
   */
  get label(): string;
  /**
   * The layer associated with the template item.
   *
   * @since 5.1
   */
  accessor layer: LayerWithFeatureTemplatesUnion;
  /**
   * Indicates whether the template item supports upload.
   *
   * @internal
   * @since 5.1
   */
  get supportsUpload(): boolean;
  /**
   * The associated FeatureTemplate for the item.
   *
   * @since 5.1
   */
  accessor template: FeatureTemplate | SharedTemplateMetadata;
  /**
   * An object used to create a thumbnail image that represents a feature type in the feature template.
   *
   * @see [FeatureTemplate.thumbnail](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureTemplate/#thumbnail)
   * @since 5.1
   */
  accessor thumbnail: HTMLElement | undefined;
}