import { Source } from '@orbit/data';
import { Dict } from '@orbit/utils';
import { Strategy } from './strategy';
export interface CoordinatorOptions {
    sources?: Source[];
    strategies?: Strategy[];
    defaultActivationOptions?: ActivationOptions;
}
export declare enum LogLevel {
    None = 0,
    Errors = 1,
    Warnings = 2,
    Info = 3
}
export interface ActivationOptions {
    logLevel?: LogLevel;
}
/**
 * The Coordinator class manages a set of sources to which it applies a set of
 * coordination strategies.
 */
export declare class Coordinator {
    protected _sources: Dict<Source>;
    protected _strategies: Dict<Strategy>;
    protected _activated?: Promise<void>;
    protected _defaultActivationOptions: ActivationOptions;
    protected _currentActivationOptions?: ActivationOptions;
    constructor(options?: CoordinatorOptions);
    addSource(source: Source): void;
    removeSource(name: string): void;
    getSource<T extends Source = Source>(name: string): T;
    get sources(): Source[];
    get sourceNames(): string[];
    addStrategy(strategy: Strategy): void;
    removeStrategy(name: string): void;
    getStrategy<T extends Strategy = Strategy>(name: string): T;
    get strategies(): Strategy[];
    get strategyNames(): string[];
    get activated(): Promise<void> | undefined;
    activate(options?: ActivationOptions): Promise<void>;
    deactivate(): Promise<void>;
    protected _activate(options?: ActivationOptions): Promise<void>;
    protected _deactivate(): Promise<void>;
}
