import { TemplateRef } from '@angular/core';
import { ActivatedRoute, Params, Router } from '@angular/router';
import { BsModalRef, BsModalService, ModalOptions } from 'ngx-bootstrap/modal';
import { BehaviorSubject, Subject, Subscription } from 'rxjs';
import { Dictionary } from '../classes/UtilityFunctions';
import { AppDisplayState, DataRequestError, DataRequestReply, SideNavWidgetConfig, WebSocketData } from '../interfaces/DisplayInterfaces';
import { UsageCounter, WidgetGroup } from '../interfaces/UserInterfaces';
import { DataConsumerConfiguration, ManagedDataReply, WidgetConfiguration } from '../interfaces/WidgetInterfaces';
import { AppStateService } from './AppStateService';
import { ClientSettingsService } from './ClientSettingsService';
import { ObjectDiffFinderService } from './ObjectDiffFinderService';
import { WebPlatformApiService } from './WebPlatformApiService';
export declare class DisplayStateService {
    private webPlatformApiService;
    private appStateService;
    private route;
    private router;
    private clientSettingsService;
    modalService: BsModalService;
    private objectDiffFinderService;
    /**
     * There are two ways that the display can be changed - query parameters or user clicks and input.  All changes are processed
     * through the same pipeline - turned into parameters, passed through the router navigate() method, and then processed as
     * new parameters. There is a problem where the navigate() method wont raise an event to listen to if only certain parameters
     * change, so this is a flag that lets the logic bypass handling post navigate() event so that it's only fired if the user
     * actually changes the url query parameters in the browser
     */
    ignoreRouting: boolean;
    private _ready;
    AppStateChanged: BehaviorSubject<string>;
    TopNavBannerHtml: BehaviorSubject<string>;
    MessageHouse: Subject<Params>;
    DataAvailable: Subject<DataRequestReply>;
    DataError: Subject<DataRequestError>;
    Toast: Subject<string>;
    SuccessToast: Subject<string>;
    WarnToast: Subject<string>;
    ErrorToast: Subject<string>;
    modalRef: BsModalRef;
    widgetContainer: TemplateRef<any>;
    apiCallSubscriptions: Dictionary<string, Subscription>;
    appState: AppDisplayState;
    qpSubscription: Subscription;
    constructor(webPlatformApiService: WebPlatformApiService, appStateService: AppStateService, route: ActivatedRoute, router: Router, clientSettingsService: ClientSettingsService, modalService: BsModalService, objectDiffFinderService: ObjectDiffFinderService);
    Log(logLevel: number, message: string, params?: Params): void;
    SetWidgetPreferencesObject(uniqueWidgetKey: string, value: any): void;
    SetWidgetPreferencesString(uniqueWidgetKey: string, value: string): void;
    GetWidgetPreferencesObject(uniqueWidgetKey: string): any;
    GetWidgetPreferencesString(uniqueWidgetKey: string): string;
    GetPreferredSettingsUser(): void;
    GetAllPreferredSettings(): WidgetGroup[];
    GetPreferredSettings(contextKey: string): WidgetGroup[];
    SetPreferredSettings(contextKey: string, newSettings: WidgetGroup[]): void;
    ClearLocalCache(): void;
    LoadWidgetConfigList(): void;
    AddRequiredWidgets(): void;
    AddRequiredWidgetsTo(existing: WidgetConfiguration[]): WidgetConfiguration[];
    AddRequiredSideNavTo(existing: SideNavWidgetConfig): void;
    LoadSideNavConfigList(): void;
    private handleSideNavSetup();
    private setSideNav(name);
    SetWidgetInternalSideNav(name: string, componentType: string): void;
    RemoveWidgetsInternalSideNav(): void;
    EnablePrintMode(printMode: boolean): void;
    ExistingParams(): Params;
    RouteWidgetsPerRow(count: string): void;
    RouteSideNavFilter(filter: string): void;
    RouteSideNav(name: string): void;
    SetFullScreen(fullScreen: boolean): void;
    SetSideNavVisible(visible: boolean): void;
    ToggleNavDisplay(): void;
    ToggleBreadcrumb(): void;
    RouteSideNavDisplay(display: string): void;
    RouteBreadcrumb(display: string): void;
    RemoveSort(keyToRemove: string): void;
    UserStatsIncrement(usageCounterList: UsageCounter[], key: string, autosave?: boolean): void;
    Ready(): boolean;
    SetUser(user: adal.User): void;
    SetAppTitle(title: string): void;
    SaveUserStats(): void;
    SetSorts(Sorts: Params): void;
    AddSorts(newSorts: Params): void;
    AddSort(name: string, value: string): void;
    RemoveFilter(keyToRemove: string): void;
    SetFilters(filters: Params): void;
    AddFilters(newFilters: Params): void;
    AddFilter(name: string, value: string): void;
    RemoveContext(keyToRemove: string): void;
    SetContext(newContext: Params): void;
    AddContextList(newContext: Params): void;
    AddContext(name: string, value: string): void;
    DoContextHist(newContext: Params): void;
    RouteFromQueryParamString(qpString: string): void;
    Route(newParams: Params): void;
    ProcessParams(queryParams: Params): void;
    SetWidthClass(perRow: string): void;
    SetSideNavFilter(filter: string): void;
    private differentParams(a, b);
    GetDataConsumerConfigKey(dataConsumerConfig: DataConsumerConfiguration): string;
    GetCustomHeaders(dataConsumerConfig: DataConsumerConfiguration): string;
    GetParams(dataConsumerConfig: DataConsumerConfiguration): Params;
    RequestWidgetData(config: WidgetConfiguration): DataRequestReply;
    UpdateWidgetConfigColumns(widgetName: string, dataConsumerConfig: DataConsumerConfiguration, reply: ManagedDataReply): void;
    RequestData(widgetName: string, dataConsumerConfig: DataConsumerConfiguration): DataRequestReply;
    SendData(widgetName: string, dataConsumerConfig: DataConsumerConfiguration, dataToSend: any): DataRequestReply;
    loadDataFromPolicy(widgetConfig: WidgetConfiguration, dataPolicy: string, params?: string, overrideHttpMethod?: string): void;
    GetWebSocketDataObj(dataConsumerConfig: DataConsumerConfiguration): WebSocketData;
    UpdateUriWithContextVars(uri: string, context: object, dataPolicyName: string): string;
    SetTopNavBannerHtml(html: string): void;
    RaiseToast(message: string): void;
    RaiseSuccessToast(message: string): void;
    RaiseWarnToast(message: string): void;
    RaiseErrorToast(message: string): void;
    GroupedWidgets(): WidgetGroup[];
    OpenWidgetModal(context: Params, customClass?: any, customConfig?: ModalOptions, showHeader?: boolean, showFooter?: boolean): BsModalRef;
    OpenModal(template: any, customClass: any, customConfig?: ModalOptions): BsModalRef;
    HideModal(template: BsModalRef): void;
    GetJsonDiffHtml(db: any, user: any): any;
    IsByDefaultSideNav(name: any): boolean;
    IsByDefaultWidget(name: any): boolean;
}
export declare class Events {
    static APPLICATION_READY: string;
    static SIDE_NAV_CHANGED: string;
    static SIDE_NAV_DISPLAYED_CHANGED: string;
    static BREADCRUMB_DISPLAYED_CHANGED: string;
    static SIDE_NAV_FILTER_CHANGED: string;
    static CURRENT_CONTEXT_CHANGED: string;
    static CURRENT_SORTS_CHANGED: string;
    static CURRENT_FILTERS_CHANGED: string;
    static WIDGET_CONFIG_LIST_CHANGED: string;
    static WIDTH_CLASS_CHANGED: string;
    static USER_CHANGED: string;
    static MESSAGE_PUBLISHED: string;
    static PREFERRED_SETTINGS_CHANGED: string;
    static PRINT_PREVIEW_MODE: string;
    static TITLE_CHANGED: string;
}
export declare class UrlConstants {
    static SIDENAV_NAME: string;
    static SIDENAV_FILTER: string;
    static SIDENAV_SHOW: string;
    static BREADCRUMB_SHOW: string;
    static WIDGETS_PER_ROW: string;
}
export declare class CacheConstants {
    static DEFAULT: string;
    static NEVER: string;
    static PERMANENT: string;
}
