import { Observable } from 'rxjs';
import { JsonObject } from '../base/json';
import { PlainVersionedObject, VersionedObject, VersionedObjectConstructor, VersionedObjectHandlers } from '../base/versioned-object';
import { Rpc } from '../rpc/rpc';
import { GatewayConnection } from './gateway-connection';
export declare const enum BannerHideType {
    /**
     * Indicates banner is not hidden (unusual)
     */
    None = 0,
    /**
     * Indicates banner is hidden for the current session
     */
    Session = 1,
    /**
     * Indicates banner is hidden permanently
     */
    Permanent = 2
}
/**
 * Defines banner settings for the current user shared across the application
 */
export interface BannerUserSettings extends JsonObject {
    id: string;
    hideType: BannerHideType;
}
/**
 * The Versioned representation of the Shell User Settings
 * This object is used for settings that specific to the current user and to shell
 */
export declare class CommonUserSettings extends VersionedObject {
    private static propertyNames;
    /**
     * Getter for the latest version of the common user settings
     */
    get latestVersion(): number;
    /**
     * Getter for the users preference on banner settings
     */
    get banners(): BannerUserSettings[];
    /**
     * Setter for the users preference on banner settings
     */
    set banners(value: BannerUserSettings[]);
    constructor(objectWrapper: PlainVersionedObject, handlers: VersionedObjectHandlers);
    /**
     * Attempts to upgrade the current version of the object at least one version toward the latest version.
     * if this.currentVersion is null or undefined, then the upgrade should initialize to the latest version
     * this is called iteratively until the current version is equal to the latest version
     */
    protected upgrade(): void;
}
/**
 * Defines the common application settings object that is shared through the whole application.
 */
export declare class CommonApplicationSettings extends VersionedObject {
    private static propertyNames;
    /**
     * Getter for the latest version of the common application settings
     */
    get latestVersion(): number;
    constructor(objectWrapper: PlainVersionedObject, handlers: VersionedObjectHandlers);
    /**
     * Attempts to upgrade the current version of the object at least one version toward the latest version.
     * if this.currentVersion is null or undefined, then the upgrade should initialize to the latest version
     * this is called iteratively until the current version is equal to the latest version
     */
    protected upgrade(): void;
}
/**
 * Defines the common admin settings object that is shared through the whole application.
 */
export declare class CommonAdminSettings extends VersionedObject {
    private static propertyNames;
    /**
     * Getter for the latest version of the common admin settings
     */
    get latestVersion(): number;
    /**
     * Getter for the admin's preference on the connectivity level
     */
    get connectivityLevel(): string;
    /**
     * Setter for the admin's preference on the connectivity level
     */
    set connectivityLevel(value: string);
    get autoGatewayUpdate(): boolean;
    set autoGatewayUpdate(value: boolean);
    get autoExtensionsUpdate(): boolean;
    set autoExtensionsUpdate(value: boolean);
    get scheduledUpdateTime(): string;
    set scheduledUpdateTime(value: string);
    get updateRescheduled(): boolean;
    private sessionsExpirationMinutesCache;
    get sessionsExpirationMinutes(): number;
    set sessionsExpirationMinutes(value: number);
    private credentialsExpirationTimeInMsCache;
    /**
     * Get stored manage as credentials expiration time in milliseconds
     */
    get credentialsExpirationTimeInMs(): number;
    /**
     * Store manage as credentials expiration time in milliseconds
     */
    set credentialsExpirationTimeInMs(value: number);
    set updateRescheduled(value: boolean);
    constructor(objectWrapper: PlainVersionedObject, handlers: VersionedObjectHandlers, gatewayService: GatewayConnection);
    /**
     * Attempts to upgrade the current version of the object at least one version toward the latest version.
     * if this.currentVersion is null or undefined, then the upgrade should initialize to the latest version
     * this is called iteratively until the current version is equal to the latest version
     */
    protected upgrade(): void;
}
/**
 * Defines the interface for the settings manager.
 */
export interface SettingsQuery {
    httpServerHeader: string;
    getCommonUserSettings(): Observable<CommonUserSettings>;
    getCommonApplicationSettings(): Observable<CommonApplicationSettings>;
    getCommonAdminSettings(): Observable<CommonAdminSettings>;
    getExtensionUserSettings<T extends VersionedObject>(type: VersionedObjectConstructor<T>): Observable<T>;
    getExtensionApplicationSettings<T extends VersionedObject>(type: VersionedObjectConstructor<T>): Observable<T>;
    getExtensionAdminSettings<T extends VersionedObject>(type: VersionedObjectConstructor<T>): Observable<T>;
}
/**
 * Manager for the settings. Provides an api for managing user and application settings.
 */
export declare class SettingsManager implements SettingsQuery {
    private rpc;
    private gatewayService;
    /**
     * Initializes a new instance of the SettingsManager class.
     *
     * @param rpc the RPC class instance.
     */
    constructor(rpc: Rpc, gatewayService: GatewayConnection);
    /**
     * Gets the http server header if any.
     */
    get httpServerHeader(): string;
    /**
     * Get common user settings. This is currently read-only
     */
    getCommonUserSettings(): Observable<CommonUserSettings>;
    /**
     * Get common application settings. This is currently read-only
     */
    getCommonApplicationSettings(): Observable<CommonApplicationSettings>;
    /**
     * Get common admin settings. This is currently read-only
     */
    getCommonAdminSettings(): Observable<CommonAdminSettings>;
    /**
     * Get extension user settings
     * Extension settings objects must be an object that extends VersionedObject or implements the VersionedObjectConstructor
     * example: if TestObject extends VersionedObject, then getExtensionUserSettings(TestObject) will return an Observable<TestObject>
     * you should only create 1 versioned object for your extensions user settings.
     */
    getExtensionUserSettings<T extends VersionedObject>(type: VersionedObjectConstructor<T>): Observable<T>;
    /**
     * Get extension application settings
     * Extension settings objects must be an object that extends VersionedObject or implements the VersionedObjectConstructor
     * example: if TestObject extends VersionedObject, then getExtensionApplicationSettings(TestObject) will return an
     * Observable<TestObject>. You should only create 1 versioned object for your extensions application settings.
     */
    getExtensionApplicationSettings<T extends VersionedObject>(type: VersionedObjectConstructor<T>): Observable<T>;
    /**
     * Get extension admin settings
     * Extension settings objects must be an object that extends VersionedObject or implements the VersionedObjectConstructor
     * example: if TestObject extends VersionedObject, then getExtensionAdminSettings(TestObject) will return an
     * Observable<TestObject>. You should only create 1 versioned object for your extensions admin settings.
     */
    getExtensionAdminSettings<T extends VersionedObject>(type: VersionedObjectConstructor<T>): Observable<T>;
}
