import { Feature } from 'ol';
import { Geometry } from 'ol/geom';
import { WriteGetFeatureOptions } from 'ol/format/WFS';
import StateManager from '../state/statemanager';
import SelectionParam from '../../models/selectionparam';
import LayerWms from '../../models/layers/layerwms';
import ServerWfs from '../../models/serverwfs';
import { XmlTypes } from '../../models/xmlTypes';
import ServerOgc from '../../models/serverogc';
export type WfsClientOptions = {
    featurePrefix: string;
    featureNS: string;
};
export type WfsClientOptionalOptions = {
    featurePrefix?: string;
    featureNS?: string;
};
export default class WfsClient<WfsXmlTypes = XmlTypes> {
    #private;
    stateManager: StateManager;
    get state(): import("../main").State;
    ogcServer: ServerOgc;
    maxFeatures: number;
    featurePrefix: string;
    featureNS: string;
    private readonly urlParameters;
    serverWfs: Promise<ServerWfs<WfsXmlTypes>> | undefined;
    constructor(ogcServer: ServerOgc, options: WfsClientOptions);
    get wfsUrl(): string;
    configMaxFeatures(): void;
    getServerWfs(): Promise<ServerWfs<WfsXmlTypes>>;
    describeFeatureType(): Promise<ServerWfs<WfsXmlTypes>>;
    private initializeAttribute;
    manageLayerAttribute(serverWfs: ServerWfs<WfsXmlTypes>, element: Element, featureType: string): boolean;
    validateLayerAttributeType(type: string): boolean;
    getElementToTypeName(xml: Document): Record<string, string>;
    getDescribeFeatureTypeUrl(): string;
    getFeature(selectionParam: SelectionParam): Promise<Feature<Geometry>[]>;
    completeGetFeatureOptions(featureTypes: string[], options: GetFeatureOptionalOptions): WriteGetFeatureOptions;
    getFeatureRaw(featureTypes: string[], getFeatureOptions: GetFeatureOptionalOptions): Promise<Feature<Geometry>[]>;
    /**
     * Sets or removes a time restriction on the provided query layer. Depending on the presence of a time attribute,
     * either a temporal XML filter is created or a TIME parameter is added to the URL.
     *
     * @param {QueryableLayerWms} queryLayer - The layer on which the time restriction is to be applied.
     * @return {Filter | undefined} Returns a temporal XML filter if a time attribute exists; otherwise, undefined.
     */
    private setTimeRestriction;
    private getTimeRestrictionFilter;
    private addTimeRestrictionAsUrlParameter;
}
export type QueryableLayerWms = Omit<LayerWms, 'queryLayers'> & {
    queryLayers: string;
};
export type GetFeatureOptionalOptions = Omit<WriteGetFeatureOptions, 'featureNS' | 'featurePrefix' | 'featureTypes'> & {
    featureNS?: string;
    featurePrefix?: string;
    featureTypes?: string[];
};
export declare class WfsClientMapServer extends WfsClient {
    constructor(ogcServer: ServerOgc, options: WfsClientOptionalOptions);
    getFeatureRaw(featureTypes: string[], getFeatureOptions: GetFeatureOptionalOptions): Promise<Feature<Geometry>[]>;
}
export declare class WfsClientQgis extends WfsClient {
    constructor(ogcServer: ServerOgc, options: WfsClientOptionalOptions);
    getFeatureRaw(featureTypes: string[], getFeatureOptions: GetFeatureOptionalOptions): Promise<Feature<Geometry>[]>;
}
export declare const WfsClientDefault: typeof WfsClientQgis;
export declare const WfsClientGeoServer: typeof WfsClientMapServer;
