import { ExternalLoaderBody, ExternalLoaderHeaders, ExternalLoaderParams } from "../ExternalLoader";
import Geocoded from "../Geocoded";
import { ErrorCallback, GeocodedResultsCallback, ProviderInterface, ProviderOptionsInterface } from "./";
import { GeocodeQuery, GeocodeQueryObject, ReverseQuery, ReverseQueryObject } from "../query";
export interface ChainProviderOptionsInterface extends ProviderOptionsInterface {
    readonly providers: ProviderInterface<Geocoded>[];
    readonly parallelize?: boolean;
    readonly first?: boolean;
}
export declare const defaultChainProviderOptions: {
    providers: never[];
    useSsl?: boolean | undefined;
    useJsonp?: boolean | undefined;
    apiKey?: string | undefined;
};
declare type ChainGeocodedResultsCallback = GeocodedResultsCallback<Geocoded>;
export default class ChainProvider implements ProviderInterface<Geocoded> {
    private options;
    constructor(options?: ChainProviderOptionsInterface);
    geocode(query: string | GeocodeQuery | GeocodeQueryObject): Promise<Geocoded[]>;
    geocode(query: string | GeocodeQuery | GeocodeQueryObject, callback: ChainGeocodedResultsCallback, errorCallback?: ErrorCallback): void;
    geodecode(query: ReverseQuery | ReverseQueryObject): Promise<Geocoded[]>;
    geodecode(query: ReverseQuery | ReverseQueryObject, callback: ChainGeocodedResultsCallback, errorCallback?: ErrorCallback): void;
    geodecode(latitude: number | string, longitude: number | string): Promise<Geocoded[]>;
    geodecode(latitude: number | string, longitude: number | string, callback: ChainGeocodedResultsCallback, errorCallback?: ErrorCallback): void;
    private geocodeNextProvider;
    private geodecodeNextProvider;
    private geocodeAllProviders;
    private geodecodeAllProviders;
    executeRequest(params: ExternalLoaderParams, callback: ChainGeocodedResultsCallback, headers?: ExternalLoaderHeaders, body?: ExternalLoaderBody, errorCallback?: ErrorCallback): void;
}
export {};
//# sourceMappingURL=ChainProvider.d.ts.map