import type { JSONSupport } from "../../core/JSONSupport.js";

export interface SiteLayerInfoProperties extends Partial<Pick<SiteLayerInfo, "layerId" | "nameField" | "siteIdField" | "sublayerId">> {}

/**
 * The SiteLayerInfo class describes the boundaries of managed sites and is used for visualizing groups of facilities. Sites are used by the [FloorFilter](https://developers.arcgis.com/javascript/latest/references/core/widgets/FloorFilter/) widget to provide context when browsing for a facility.
 *
 * @since 4.19
 * @see [FloorFilter](https://developers.arcgis.com/javascript/latest/references/core/widgets/FloorFilter/)
 * @see [MapFloorInfo.siteLayer](https://developers.arcgis.com/javascript/latest/references/core/support/MapFloorInfo/#siteLayer)
 */
export default class SiteLayerInfo extends JSONSupport {
  constructor(properties?: SiteLayerInfoProperties);
  /** The id for an operational layer in a map. This allows SiteLayerInfo to refer to an operational layer that contains Site features. When configuring a floor-aware map manually, as opposed to configuring it in ArcGIS Pro, this value needs to be set with the ID value from the appropriate Layer object, whether a [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/) or [SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/). */
  accessor layerId: string | null | undefined;
  /** The field name from the layer that defines the site name of a feature. */
  accessor nameField: string | null | undefined;
  /** The field name from the layer that defines a site unique ID for a feature. */
  accessor siteIdField: string | null | undefined;
  /**
   * This value references the numeric ID of the sublayer if the Site layer is a
   * map service sublayer instead of a feature layer.
   */
  accessor sublayerId: number | null | undefined;
}