import * as L from 'leaflet';
import 'leaflet.markercluster';
import { IotMapConfig } from './iot-map-config';
import { IotMapDisplay } from './iot-map-types';
export declare class IotMapManager {
    private map;
    private config;
    private displayedMarkers;
    private selectedElement;
    private baseLayers;
    private markersLayers;
    private layerControl;
    private firstLayerAdded;
    private accuracyDisplayed;
    private currentDisplayedLayers;
    /**
     * Constructor
     * @param config - config to use for map display
     */
    constructor(config: IotMapConfig);
    onMove?: () => void;
    onEltClick?: (id: string) => void;
    /**
     * Initialise a leaflet map with default position, zoom and layer
     *
     * @param selector - map id
     */
    init(selector: string): void;
    /**
     * Create a layer according to marker / cluster types : if clustering is automatic or external, if layer is for
     * displaying accuracy areas or user marker...
     * @param layerName - name of the layer to init
     */
    private initLayer;
    /**
     * Returns Leaflet layer corresponding to layerName
     *
     * @param layerName - name of the layer
     */
    getLayer(layerName: string): L.MarkerClusterGroup | L.FeatureGroup;
    /**
     * Returns leaflet map
     *
     * @returns the leaflet map previously initialised
     */
    getIotMap(): L.Map;
    /**
     * switch a displayed element to selected
     * @param elt - element to select
     */
    selectElement(elt: IotMapDisplay): void;
    /**
     * switch a displayed element to unselected
     * @param elt - element to unselect
     */
    unselectElement(elt: IotMapDisplay): void;
    /**
     * Add a marker to the map.
     * @param elt - marker to add
     * @param layer - layer to add the marker in
     * @param id - marker id
     *
     * @remarks used to get the list of displayed markers
     */
    addElement(elt: IotMapDisplay, layer: string, id: string): void;
    /**
     * remove a marker from the map.
     * @param layer - layer to add the marker in
     * @param id - marker id
     *
     * @remarks used to get the list of displayed markers
     */
    removeElement(elt: IotMapDisplay, layer: string): void;
    /**
     * Set selection status
     * @param elt - element (marker, cluster...) to select/unselect
     * @param selected - True if element must be selected, false otherwise
     */
    private changeSelectionStatus;
    /**
     * Returns a DivIcon compatible with leaflet, representing all automatic cluster information (shape, tab, popup, gauge...)
     * @param leafletCluster - cluster computed by leaflet
     */
    private getClusterIcon;
    /**
     * Called on element click
     * @param event - event data
     */
    private onElementClick;
    /**
     * Called on cluster mouse over
     * @param event - event data
     */
    private onClusterMouseOver;
    /**
     * Called on cluster mouse out
     * @param event - event data
     */
    private onClusterMouseOut;
    /**
     * Called on marker mouse over (to bring manual cluster in front)
     * @param event - event data
     */
    private onElementMouseOver;
    /**
     * Called on marker mouse out (to bring manual cluster in background)
     * @param event - event data
     */
    private onElementMouseOut;
    /**
     * Called when displayed map area change (zoom in, zoom out, move, click...)
     */
    private onZoom;
    private onBaseLayerChange;
    private onOverlayAdd;
    private onOverlayRemove;
    private onClick;
    private updateAccuracy;
}
