import { NgZone } from '@angular/core';
import { Observable } from 'rxjs';
import { NgMapsCircleDirective } from '../../directives/circle';
import { BoundsLiteral } from '../../interface/bounds';
import { CircleOptions } from '../../interface/circle-options';
import { GeoPoint } from '../../interface/geo-point';
import { MapsApiWrapper } from '../maps-api-wrapper';
import * as i0 from "@angular/core";
export declare abstract class CircleManager<T = any> {
    protected _apiWrapper: MapsApiWrapper;
    protected _zone: NgZone;
    protected _circles: Map<NgMapsCircleDirective, Promise<T>>;
    constructor(_apiWrapper: MapsApiWrapper, _zone: NgZone);
    /**
     * @param circle
     */
    abstract addCircle(circle: NgMapsCircleDirective): Promise<void> | void;
    /**
     * Removes the given circle from the map.
     */
    abstract removeCircle(circle: NgMapsCircleDirective): Promise<void>;
    /**
     * @todo check how to improve type casting
     * @param circle instance of {@link NgMapsCircleDirective}
     * @param options options for the circle
     */
    abstract setOptions(circle: NgMapsCircleDirective, options: CircleOptions): Promise<void>;
    abstract getBounds(circle: NgMapsCircleDirective): Promise<BoundsLiteral | null>;
    abstract getCenter(circle: NgMapsCircleDirective): Promise<GeoPoint | null>;
    abstract getRadius(circle: NgMapsCircleDirective): Promise<number | null>;
    abstract setCenter(circle: NgMapsCircleDirective): Promise<void>;
    abstract setEditable(circle: NgMapsCircleDirective): Promise<void>;
    abstract setDraggable(circle: NgMapsCircleDirective): Promise<void>;
    abstract setVisible(circle: NgMapsCircleDirective): Promise<void>;
    abstract setRadius(circle: NgMapsCircleDirective): Promise<void>;
    abstract createEventObservable<E>(eventName: string, circle: NgMapsCircleDirective): Observable<E>;
    static ɵfac: i0.ɵɵFactoryDeclaration<CircleManager<any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<CircleManager<any>>;
}
