import type Extent from "@arcgis/core/geometry/Extent";
import type WMSSublayer from "@arcgis/core/layers/support/WMSSublayer";
import type { WMSSublayerJson } from "../json/WMSSublayerJson.js";
import type { InitializableCollection } from "../support/InitializableCollectionProxy.js";
import type { SublayerLike, WFSFeatureType, WFSLayerInfo } from "../support/esri.js";
import type { WMSLayerExtension } from "./WMSLayerExtension.js";
import type { SublayerExtensionProperties, SublayerProperties } from "./_SublayerExtension.js";
import { SublayerExtension, SubSublayerExtensionCollection } from "./_SublayerExtension.js";
/**
 * Properties that can be specified for the
 * {@link WMSSublayerExtensionProperties.sublayer} property.
 */
export interface WMSSublayerProperties extends SublayerProperties, WMSSublayerJson {
}
/**
 * Properties that can be passed into the constructor for
 * {@link WMSSublayerExtension}.
 */
export interface WMSSublayerExtensionProperties extends SublayerExtensionProperties {
    /**
     * See {@link mapping/_SublayerExtension!SublayerExtension.sublayer}.
     */
    sublayer?: WMSSublayer | WMSSublayerProperties;
    /**
     * See
     * {@link mapping/_SublayerExtension!SublayerExtension.sublayerExtensions}.
     */
    sublayerExtensions?: (WMSSublayerExtension | WMSSublayerExtensionProperties)[];
}
/**
 * A collection of sublayer extensions belonging to a WMSLayerExtension.
 */
export interface WMSSublayerExtensionCollection extends InitializableCollection<WMSSublayerExtensionProperties, WMSSublayerExtension> {
    /**
     * Get the sublayer extension for a given id.
     *
     * @param id The id of the sublayer extension.
     * @returns The sublayer extension.
     */
    findById(id: string): WMSSublayerExtension;
    /**
     * Get the corresponding sublayer extension for a given sublayer id.
     *
     * @param id The id of the sublayer.
     * @returns The corresponding sublayer extension.
     */
    findBySublayerId(id: number): WMSSublayerExtension;
    /**
     * Gets the corresponding sublayer extension for a given sublayer.
     *
     * @param sublayer A sublayer.
     * @returns The corresponding sublayer extension.
     */
    forSublayer(sublayer: WMSSublayer): WMSSublayerExtension;
}
/**
 * Extends the capabilities of an Esri WMSSublayer object.
 */
export declare class WMSSublayerExtension extends SublayerExtension<WMSSublayerExtensionProperties> {
    /**
     * Information about a corresponding WFS layer that can be used for
     * querying/identifying this sublayer.
     *
     * If not set explicitly, it can be initialized from the parent layer
     * extension's `wfsUrl` by calling `initializeWfs()`.
     */
    wfsLayerInfo?: WFSLayerInfo;
    /**
     * The WFS feature associated with this sublayer if there is an associated
     * `wfsLayerInfo`.
     */
    get wfsFeatureType(): WFSFeatureType | undefined;
    get sublayer(): WMSSublayer;
    get sublayerExtensions(): WMSSublayerExtensionCollection;
    get layerExtension(): WMSLayerExtension;
    get supportsSublayers(): boolean;
    get effectiveFullExtent(): Extent;
    get hasFeatures(): boolean;
    get canChangeOpacity(): boolean;
    private _initializeWfsPromise;
    /**
     * Initializes the WFS info associated with this sublayer if the parent
     * layer extension has an associated WFS URL.
     */
    initializeWfs(): Promise<void>;
    _createSublayerExtension(properties?: WMSSublayerExtensionProperties): SublayerExtension;
    /**
     * @inheritDoc
     */
    protected _isSupportedSublayer(sublayer: SublayerLike): boolean;
    /**
     * @inheritDoc
     */
    protected _createSublayer(properties: WMSSublayerProperties): Promise<WMSSublayer>;
    /**
     * @inheritDoc
     */
    protected _applySublayerProperties(properties: WMSSublayerProperties, sublayer: WMSSublayer): Promise<void>;
    /**
     * @inheritDoc
     */
    protected _serializeSublayer(sublayer: WMSSublayer): WMSSublayerProperties;
    protected _createSublayerExtensionCollection(): SubSublayerExtensionCollection;
}
