import { IInitAsyncOptions } from './init';
import { ReduxDispatch, Dictionary } from '../api/common';
import { IGenericSubjectMapLayer, IInitAppActionPayload, MapInfo } from './defs';
import { ApplicationDefinition, MapConfiguration } from '../api/contracts/fusion';
import { Client } from '../api/client';
export declare type SessionInit = {
    session: string;
    sessionWasReused: boolean;
};
export declare function buildSubjectLayerDefn(name: string, map: MapConfiguration): IGenericSubjectMapLayer;
export declare function getMapDefinitionsFromFlexLayout(appDef: ApplicationDefinition): (MapToLoad | IGenericSubjectMapLayer)[];
export declare type MapToLoad = {
    name: string;
    mapDef: string;
    metadata: any;
};
export declare function isMapDefinition(arg: MapToLoad | IGenericSubjectMapLayer): arg is MapToLoad;
export declare function isStateless(appDef: ApplicationDefinition): boolean;
export interface IViewerInitCommand {
    attachClient(client: Client): void;
    runAsync(options: IInitAsyncOptions): Promise<IInitAppActionPayload>;
}
export declare abstract class ViewerInitCommand<TSubject> implements IViewerInitCommand {
    protected readonly dispatch: ReduxDispatch;
    constructor(dispatch: ReduxDispatch);
    abstract attachClient(client: Client): void;
    abstract runAsync(options: IInitAsyncOptions): Promise<IInitAppActionPayload>;
    protected abstract isArbitraryCoordSys(map: TSubject): boolean;
    protected abstract establishInitialMapNameAndSession(mapsByName: Dictionary<TSubject>): [string, string];
    protected abstract setupMaps(appDef: ApplicationDefinition, mapsByName: Dictionary<TSubject>, config: any, warnings: string[], locale: string): Dictionary<MapInfo>;
    protected initLocaleAsync(options: IInitAsyncOptions): Promise<void>;
    protected getExtraProjectionsFromFlexLayout(appDef: ApplicationDefinition): string[];
    protected initFromAppDefCoreAsync(appDef: ApplicationDefinition, options: IInitAsyncOptions, mapsByName: Dictionary<TSubject | IGenericSubjectMapLayer>, warnings: string[]): Promise<IInitAppActionPayload>;
}
