import { Omit } from "@intelligentgraphics/ig.utilities";
import { ArticleQuery } from "./ArticleQuery";
import { NotificationCenterSubscriptionOptions, NotificationCenterSubscription, NotificationCenterSubscriptionCallbacks, NotificationCallback, AllNotificationsData } from "./NotificationCenter";
import { NotificationPayloads, Notifications } from "./Notifications";
import { ArticleManager } from "./ArticleManager";
import { ConnectionManager } from "./ConnectionManager";
import { BackendManager } from "./BackendManager";
import { ServiceManager } from "./ServiceManager";
import { ProjectManager } from "./ProjectManager";
import { OperationResultHandler } from "./OperationResultHandler";
import { Hooks } from "./Hooks";
import { SourceRegistry } from "./SourceRegistry";
import { LocalizationManager } from "./LocalizationManager";
import { ApplicationStateValue } from "./ApplicationState";
declare type SessionServiceManagerAPI = Omit<ServiceManager, "registerOperator" | "deleteArticleSource">;
export interface SessionNotificationCenterApi<AppStateValue extends ApplicationStateValue = ApplicationStateValue, EventPayloads extends NotificationPayloads<AppStateValue> = NotificationPayloads<AppStateValue>> {
    onAnyEvent(callback: (data: AllNotificationsData<EventPayloads>) => void, options?: NotificationCenterSubscriptionOptions): NotificationCenterSubscription<EventPayloads>;
    on<E extends keyof EventPayloads>(event: E, callback: NotificationCallback<EventPayloads[E]>, options?: NotificationCenterSubscriptionOptions): NotificationCenterSubscription<EventPayloads>;
    subscribe(on: NotificationCenterSubscriptionCallbacks<EventPayloads>, options?: NotificationCenterSubscriptionOptions): NotificationCenterSubscription<EventPayloads>;
    unsubscribe(subscriber: string, notification?: Notifications): void;
    sendNotification<E extends keyof EventPayloads>(sender: string, notification: E, data: EventPayloads[E]): void;
}
export interface Session<AppStateValue extends ApplicationStateValue = ApplicationStateValue, EventPayloads extends NotificationPayloads<AppStateValue> = NotificationPayloads<AppStateValue>> extends ArticleQuery, ArticleManager, ConnectionManager, BackendManager, SessionServiceManagerAPI, ProjectManager, OperationResultHandler, SourceRegistry, LocalizationManager, SessionNotificationCenterApi<AppStateValue, EventPayloads> {
    hooks: Hooks;
    /**
     * Closes all server connections and removes all subscriptions
     *
     * @returns {Promise<void>}
     */
    destroy(): Promise<void>;
    /**
     * Resets internal, article related session state
     *
     * @returns {Promise<void>}
     */
    reset(): Promise<void>;
    getApplicationState(): AppStateValue;
    getApplicationStateValue<K extends keyof AppStateValue>(key: K): AppStateValue[K];
    setApplicationState<K extends keyof AppStateValue>(update: Pick<AppStateValue, K>): void;
    setApplicationStateValue<K extends keyof AppStateValue>(key: K, value: AppStateValue[K]): void;
    scheduleArticleOperation<T>(comId: string, callback: () => Promise<T>): Promise<T>;
}
export {};
