import { IRouteContext, AppInstanceContext, IMessageBusTopicSubscription, TokenBasedRouteStateData, Future } from "../models";
import { AppService, PermissionService } from "../services";
import { MessageBusTopicMediator } from "../core";
import { OmniaContext } from "../contexts";
import { BusinessProfileStore, UserTargetingStore } from "../stores";
import { OmniaUxLocalization } from ".";
export interface TokenBasedRouteStateDataDict {
    [token: string]: TokenBasedRouteStateData;
}
export interface StateData {
    public?: any;
    tokenBased?: TokenBasedRouteStateDataDict;
}
/**
 * Base Routing logic*
 **/
export declare class InternalRouter {
    static businessProfileStore: BusinessProfileStore;
    static omniaCtx: OmniaContext;
    static appService: AppService;
    static userTargetingStore: UserTargetingStore;
    static permissionService: PermissionService;
    static omniaUxLoc: OmniaUxLocalization;
    static tokenPrefix: string;
    private static publicPath;
    private static tokenPath;
    private static stateData;
    static resolveTokenBasedContext: (stateDataDictFromBrowserPopState?: TokenBasedRouteStateDataDict) => void;
    static publicRouteCtx: IRouteContext;
    static appInstanceChangedPublishSubscriber: MessageBusTopicMediator<AppInstanceContext>;
    static onAppInstanceChanged: () => IMessageBusTopicSubscription<AppInstanceContext>;
    static contextReadyPromise: Future<IRouteContext>;
    /**
     * The init of the router should only be done once and very early in the boot
     **/
    static init(): void;
    private static IsInBusinessProfileScope;
    private static buildPublicRoutePath;
    static tokenBasedNavigate(title: string, path: string, tokenBasedStateData?: TokenBasedRouteStateDataDict, updateState?: boolean, replaceState?: boolean): boolean;
    static publicNavigate(title: string, path: string, stateData?: StateData, updateState?: boolean): void;
    private static handleAppChange;
    private static createNotFoundElement;
    private static createUnauthorizedElement;
    private static createSetupInProgressElement;
    private static onPopState;
    static hasToken(): boolean;
    static setPublicTitle(title: string, ignoreIfTokenBasedExists?: boolean): void;
    /**
     * Subscribe to public navigation changes
     **/
    static onPublicNavigate(cb: (routeCtx: IRouteContext) => void): void;
    static combine(...parts: string[]): string;
    /**
    * Perform clientside navigation using push state
    **/
    private static pushState;
    private static get fullPathIncludeHashWithoutToken();
    private static get hashWithoutToken();
    private static get pathWithoutTokenAndParams();
    private static removeTokenPart;
    private static extractTokenPart;
    private static get isOmniaApp();
    private static getRedirectRoutePath;
    private static isLayoutRoute;
    private static getRedirectRoute;
    private static joinPath;
    private static comparePath;
}
