import { Image as ImageLayer } from 'ol/layer.js';
import Feature from 'ol/Feature.js';
import ImageWMS from 'ol/source/ImageWMS.js';
import { Map } from 'ol';
import LayerWms from '../../models/layers/layerwms.js';
import SelectionParam from '../../models/selectionparam.js';
import WfsFilter from '../wfs/wfsfilter.js';
import ServerOgc from '../../models/serverogc.js';
import IGirafeContext from '../context/icontext.js';
export default abstract class WmsClient {
    private readonly map;
    private readonly ogcServer;
    private readonly context;
    private readonly resolutionTolerance;
    private readonly geoJson;
    private readonly wmsGetFeatureInfo;
    private capabilityPromise;
    private capabilities;
    private get state();
    private get audienceExcludedPaths();
    private layers;
    private olayer?;
    private independentLayers;
    private basemapLayers;
    constructor(ogcServer: ServerOgc, map: Map, context: IGirafeContext);
    removeAllBasemapLayers(): void;
    addLayer(layerWms: LayerWms): void;
    private addLayerInternal;
    createImageWMSSource(layerList?: LayerWms[]): ImageWMS;
    abstract getOpenLayerLayerNames(layerList: LayerWms[]): string[];
    addBasemapLayer(layerWms: LayerWms): void;
    removeLayer(layerWms: LayerWms): void;
    layerExists(layerWms: LayerWms): boolean;
    private layerInStandardLayers;
    private layerIsIndependentLayer;
    private layerIsBasemapLayer;
    getOLayer(layerWms: LayerWms): ImageLayer<ImageWMS> | null;
    changeOpacity(layerWms: LayerWms): void;
    changeFilter(layerWms: LayerWms): void;
    changeTimeRestriction(layerWms: LayerWms): void;
    prepareSwipe(layerWms: LayerWms): void;
    private manageLayerOptions;
    private makeLayerIndependent;
    private updateLayerFilter;
    abstract buildFilterQuery(layerWms: LayerWms): string;
    private updateTimeRestriction;
    selectFeatures(extent: number[]): void;
    /**
     * Selects features based on the specified query and prepares selection parameters.
     */
    selectFeaturesByQuery(query: WfsFilter): void;
    getFeatureInfo(selectionParam: SelectionParam): Promise<Feature<import("ol/geom.js").Geometry, {
        [x: string]: any;
    }>[]>;
    private getFeatureInfoUrl;
    private handleGetFeatureInfoResponse;
    refreshZIndexes(): void;
    getWmsCapabilities(params?: URLSearchParams): Promise<Record<string, unknown>>;
}
export declare class WmsClientQgis extends WmsClient {
    /** QGIS-server does not filter on a WMS layer made from multiple underlying WFS queryLayers
     * Solution: directly query the queryLayers
     */
    getOpenLayerLayerNames(layerList: LayerWms[]): string[];
    /** MapServer wants 1 filter per underlying WFS queryLayer, all included in parentheses
     * QGIS-server wants 1 filter per underlying WFS queryLayer, each in its own in parentheses
     *
     * MapServer: (<filter>...</filter><filter>...</filter>)
     * QGIS-server: (<filter>...</filter>)(<filter>...</filter>)
     */
    buildFilterQuery(layerWms: LayerWms): string;
}
export declare class WmsClientMapServer extends WmsClient {
    getOpenLayerLayerNames(layerList: LayerWms[]): string[];
    buildFilterQuery(layerWms: LayerWms): string;
}
export declare const WmsClientDefault: typeof WmsClientQgis;
export declare const WmsClientGeoServer: typeof WmsClientMapServer;
