import type BuildingSceneLayer from "@arcgis/core/layers/BuildingSceneLayer";
import type Layer from "@arcgis/core/layers/Layer";
import type BuildingComponentSublayer from "@arcgis/core/layers/buildingSublayers/BuildingComponentSublayer";
import type BuildingGroupSublayer from "@arcgis/core/layers/buildingSublayers/BuildingGroupSublayer";
import type PortalItem from "@arcgis/core/portal/PortalItem";
import type { QuerySourceCapabilities } from "../data/QuerySourceCapabilities.js";
import type { Schema } from "../data/Schema.js";
import type { BuildingSceneLayerJson } from "../json/BuildingSceneLayerJson.js";
import type { InitializableCollection } from "../support/InitializableCollectionProxy.js";
import type { PropertyDefs } from "../support/Serializable.js";
import type { BuildingSublayerExtension, BuildingSublayerExtensionProperties } from "./BuildingSublayerExtension.js";
import type { LayerExtensionProperties, LayerExtensionSchemaPropertyBinding, LayerProperties } from "./_LayerExtension.js";
import { LayerExtension, LayerExtensionSchema } from "./_LayerExtension.js";
import { SublayerExtensionCollectionBase } from "./support/_SublayerExtensionCollection.js";
/**
 * Properties that can be passed into the constructor for
 * {@link BuildingSceneLayerExtension}.
 */
export interface BuildingSceneLayerExtensionProperties extends LayerExtensionProperties {
    /**
     * @inheritdoc
     */
    layer?: BuildingSceneLayer | BuildingSceneLayerProperties;
    /**
     * @inheritdoc
     */
    sublayerExtensions?: (BuildingSublayerExtension | BuildingSublayerExtensionProperties)[];
}
/**
 * Properties that can be specified for the
 * {@link BuildingSceneLayerExtensionProperties.layer} property.
 */
export interface BuildingSceneLayerProperties extends BuildingSceneLayerJson, Omit<LayerProperties, "layerType"> {
}
/**
 * A collection of sublayer extensions belonging to a BuildingLayerExtension.
 */
export interface BuildingSublayerExtensionCollection extends InitializableCollection<BuildingSublayerExtensionProperties, BuildingSublayerExtension> {
    /**
     * Get the sublayer extension for a given id.
     *
     * @param id The id of the sublayer extension.
     * @returns The sublayer extension.
     */
    findById(id: string): BuildingSublayerExtension;
    /**
     * Get the corresponding sublayer extension for a given sublayer id.
     *
     * @param id The id of the sublayer.
     * @returns The corresponding sublayer extension.
     */
    findBySublayerId(id: string | number): BuildingSublayerExtension;
    /**
     * Gets the corresponding sublayer extension for a given sublayer.
     *
     * @param sublayer A sublayer.
     * @returns The corresponding sublayer extension.
     */
    forSublayer(sublayer: BuildingComponentSublayer | BuildingGroupSublayer): BuildingSublayerExtension;
}
/**
 * Extends the capabilities of an Esri `BuildingSceneLayer` object backed by a
 * feature service.
 */
export declare class BuildingSceneLayerExtension extends LayerExtension<BuildingSceneLayerExtensionProperties> {
    get layer(): BuildingSceneLayer;
    get sublayerExtensions(): BuildingSublayerExtensionCollection;
    get supportsSublayers(): boolean;
    private _deferredSublayerProperties;
    constructor(properties?: BuildingSceneLayerExtensionProperties);
    protected _applyLayerProperties(properties: BuildingSceneLayerProperties, layer: BuildingSceneLayer): Promise<void>;
    protected _onInitialize(): Promise<void>;
    protected _createSublayerExtensionCollection(): SublayerExtensionCollectionBase;
    /**
     * @inheritDoc
     */
    protected _isSupportedLayer(layer: Layer): boolean;
    protected _createSchema(): Schema;
    protected _applyPortalItemProperties(portalItem: PortalItem): Promise<void>;
    protected _capabilities(): QuerySourceCapabilities;
    protected _getSerializableProperties(): PropertyDefs<BuildingSceneLayerExtensionProperties>;
}
/**
 * An implementation of Schema that directly mirrors the equivalent properties
 * on BuildingSceneLayer.
 */
export declare class BuildingSceneLayerReadOnlySchema extends LayerExtensionSchema {
    protected _getPropertyBindings(): Partial<Record<keyof this, LayerExtensionSchemaPropertyBinding>>;
    protected _setSetting<K extends keyof this>(setting: K, value: this[K]): void;
}
