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

export interface FacilityLayerInfoProperties extends JSONSupportMixinProperties, Partial<Pick<FacilityLayerInfo, "facilityIdField" | "layerId" | "nameField" | "siteIdField" | "sublayerId">> {}

/**
 * The FacilityLayerInfo describes the footprints of managed buildings and other structures. Facilities are used by the [FloorFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html) widget to provide a list of floors specific to one facility.
 * A facility can represent any occupiable structure, such as an office or campus building, retail setting, warehouse, generator or pump house, silo, or any industrial structure. Facilities features should be contained within a Sites feature.
 *
 * @since 4.19
 * @see [FloorFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html)
 * @see [MapFloorInfo#facilityLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-MapFloorInfo.html#facilityLayer)
 */
export default class FacilityLayerInfo extends JSONSupport {
  constructor(properties?: FacilityLayerInfoProperties);
  /** The field name from the layer that defines the facility unique ID for a feature. */
  accessor facilityIdField: string | null | undefined;
  /** Identifies an operational layer in a map. It allows FacilityLayerInfo to refer to an operational layer that contains facility 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](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) object, whether [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) or [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html). */
  accessor layerId: string | null | undefined;
  /** The field name from the layer that defines the facility name for a feature. */
  accessor nameField: string | null | undefined;
  /** The field name from the layer that records the unique ID of a feature's associated site and can be used to identify a feature's associated site feature in floor-aware maps. A feature can only be related to a single site using this property. */
  accessor siteIdField: string | null | undefined;
  /**
   * This value references the numeric ID of the sublayer if the Facility layer is a
   * map service sublayer instead of a feature layer.
   */
  accessor sublayerId: number | null | undefined;
}