import type LayerReference from "./LayerReference.js";
import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { FeatureReferenceIdUnion } from "../types.js";
import type { LayerReferenceProperties } from "./LayerReference.js";
import type { FeatureReferenceGlobalIdProperties } from "./FeatureReferenceGlobalId.js";
import type { FeatureReferenceObjectIdProperties } from "./FeatureReferenceObjectId.js";

export interface FeatureReferenceProperties {
  /**
   * Unique identifier for the feature inside the layer or sublayer.
   *
   * @since 4.33
   */
  id?: ((FeatureReferenceObjectIdProperties & { type: "object-id" }) | (FeatureReferenceGlobalIdProperties & { type: "global-id" }));
  /**
   * Identifies the layer and, if applicable, the sublayer to  which the feature belongs.
   *
   * @since 4.33
   */
  layerReference?: LayerReferenceProperties;
}

/**
 * References a feature by unique id, layer id, and sublayer id, if applicable.
 *
 * @since 4.33
 */
export default class FeatureReference extends FeatureReferenceSuperclass {
  /** @since 4.33 */
  constructor(properties?: FeatureReferenceProperties);
  /**
   * Unique identifier for the feature inside the layer or sublayer.
   *
   * @since 4.33
   */
  get id(): FeatureReferenceIdUnion;
  set id(value: ((FeatureReferenceObjectIdProperties & { type: "object-id" }) | (FeatureReferenceGlobalIdProperties & { type: "global-id" })));
  /**
   * Identifies the layer and, if applicable, the sublayer to  which the feature belongs.
   *
   * @since 4.33
   */
  get layerReference(): LayerReference;
  set layerReference(value: LayerReferenceProperties);
}
declare const FeatureReferenceSuperclass: typeof JSONSupport & typeof ClonableMixin