/**
 * Important note: These classes make use of "getters". Don't confuse these with function calls.
 */
import { SDServerInfo, MonitorInfo, VirtualScreenCoordinates, CacheOptions } from "../FEA";
import { StandardErrorCallback, Manifest, StandardPromise } from "../types";
import { FEAWindow, NotificationOptions, FEAInfo } from "../FEA";
declare class SystemWindow {
    static wrapCache: Record<string, FEAWindow>;
    static createNew(params: any, cb: StandardErrorCallback<FEAWindow>): void;
    static getCurrent(): FEAWindow;
    static wrap(windowName: string): FEAWindow;
}
/**
 * Partially emulates a fin SystemWindow when running in a browser.
 */
declare class FreestandingWindow {
    static createNew(params: any, cb: StandardErrorCallback<FEAWindow>): void;
    /**
     * Partial polyfill of FEA's getCurrent() for when running in a freestanding window.
     *
     * A few pieces of core code still rely on `getCurrent().name` (expecting it to be the current windowName).
     *
     * This polyfill can be eliminated when all of those code instances are converted to using getStartupData().
     */
    static getCurrent(): FEAWindow;
    static wrap(): FEAWindow;
}
/**
 * <h2>Clipboard</h2>
 * @param {object} params
 */
declare class Clipboard {
    constructor();
    /**
     * Write Text to Clipboard
     */
    static writeText(data: any, type: any, callback: any, errorCallback: any): void;
    static writeHTML(data: any, type: any, callback: any, errorCallback: any): void;
    static writeRTF(data: any, type: any, callback: any, errorCallback: any): void;
    static readText(type: any, callback: any, errorCallback: any): void;
    static readHTML(type: any, callback: any, errorCallback: any): void;
    static readRTF(type: any, callback: any, errorCallback: any): void;
}
/**
 * <h2>The Finsemble System API </h2>
 * ----------
 * The Finsemble System API is a set private and experimental of APIs for exposing operating system and electron-based functionality, including the clipboard, mouse position, monitor info, and others.
 * @private
 */
export declare class System {
    /**
     * Enables API usage tracking. Should be called by FSBLDesktop.
     */
    static enableAPIUsageTracking(): void;
    /**
     * Application is deprecated. getCurrent().restart() continues to be used by LTS seed so this must
     * stay until we can remove SDD permanently from seed.
     *
     * The other functions can be removed once clients are confirmed not to be using them.
     */
    static get Application(): {
        getCurrent: () => {
            restart: () => void;
            getWindow: () => FEAWindow;
            addEventListener: (type: any, listener: (event: any) => void, callback?: () => void, errorCallback?: (reason: string) => void) => void;
            close: (force?: boolean, callback?: () => void, errorCallback?: (reason: string) => void) => void;
            getChildWindows: (callback?: (children: FEAWindow[]) => void, errorCallback?: (reason: string) => void) => void;
            getGroups: (callback?: (groups: FEAWindow[][]) => void, errorCallback?: (reason: string) => void) => void;
            getManifest: (callback?: (manifest: Manifest) => void, errorCallback?: (reason: string) => void) => void;
            getParentUuid: (callback?: (uuid: string) => void, errorCallback?: (reason: string) => void) => void;
            getInfo: (callback?: (info: any) => void, errorCallback?: (reason: string) => void) => void;
            getTrayIconInfo: (callback?: (trayInfo: any) => void, errorCallback?: (reason: string) => void) => void;
            isRunning: (callback?: (running: boolean) => void, errorCallback?: (reason: string) => void) => void;
            registerUser: (userName: string, appName: string, callback?: () => void, errorCallback?: (reason: string) => void) => void;
            removeEventListener: (type: any, previouslyRegisteredListener: (event: any) => any, callback?: () => void, errorCallback?: (reason: string) => void) => void;
            removeTrayIcon: (callback?: () => void, errorCallback?: (reason: string) => void) => void;
            run: (callback?: (successObj: any) => void, errorCallback?: (reason: string, errorObj: any) => void) => void;
            scheduleRestart: (callback?: () => void, errorCallback?: (reason: string) => void) => void;
            setTrayIcon: (iconUrl: string, listener: {
                [key: string]: Function;
            }, callback?: () => void, errorCallback?: (reason: string) => void) => void;
            terminate: (callback?: () => void, errorCallback?: (reason: string) => void) => void;
            wait: (callback?: () => void, errorCallback?: (reason: string) => void) => void;
            window: {
                name: string;
            };
            uuid: string;
        };
    };
    /**
     * Determines if the current window was launched through finsemble, or is external or freestanding
     * @private
     * @returns boolean True if freestanding
     */
    static isFreestanding(): boolean;
    /**
     * Window
     * @private
     * @returns Window
     */
    static get Window(): typeof SystemWindow | typeof FreestandingWindow;
    /**
     * Notification
     * @private
     * @returns Notification
     */
    static get Notification(): {
        send: (params: NotificationOptions) => void;
    };
    /**
     * Clipboard
     * @private
     * @returns Clipboard
     */
    static get Clipboard(): typeof Clipboard;
    static getManifest(cb?: (manifest: Manifest) => void): Promise<Manifest>;
    /**
     * (experimental) Gets current mouse position
     * @experimental
     * @param cb
     */
    static getMousePosition(cb?: StandardErrorCallback<VirtualScreenCoordinates>): Promise<VirtualScreenCoordinates>;
    /**
     * Deletes assets downloaded via the manifest's `appAssets` config
     * @param alias - If set then delete that specific asset, otherwise delete them all
     * @returns A golang style promise that resolves after the delete is complete
     */
    static deleteAssets(alias?: string | null): StandardPromise<void>;
    /**
     * Asynchronous method that passes the SmartDesktopDesigner's Server Information to the provided callback
     * @private
     * @returns Clipboard
     */
    static getSDServerInfo(cb?: Function): Promise<SDServerInfo>;
    /**
     * Get all monitors
     * @private
     * @param cb Callback with monitorInfo type
     */
    static getMonitorInfo(cb?: (monitorInfo: MonitorInfo) => void): Promise<MonitorInfo>;
    /**
     * Returns a boolean that is true when the webcontents are running within an electron browserView
     * @private
     * @returns boolean
     */
    static isBrowserView(): boolean;
    /**
     * Returns the BrowserViewId.  See  isBrowserView method.
     * @private
     * @returns number The browserViewId
     * @deprecated use getWebContentsId
     */
    static getViewId(): number | null;
    /**
     * Returns the Electron WebContents ID for the current WebContents (view or window)
     * @private
     * @returns number The WebContents ID
     */
    static getWebContentsId(): number | null;
    /**
     * Does the current webcontents contain browserviews
     * @deprecated - use isTitlebarWindow() instead
     * @private
     * @returns boolean True when the current webcontents are a browserwindow that contains associated browserviews
     */
    static hasBrowserView(): boolean;
    /**
     * Is the current webcontents a title bar shell
     * @private
     * @returns boolean True when the current webcontents is a title bar shell
     */
    static isTitlebarWindow(): boolean;
    /**
     * Returns the fin object
     * @private
     * @returns fin
     */
    static get fin(): import("../FEA").FEA;
    /**
     * Invokes optional callback and resolves promise when FEA is ready.
     *
     * @param {Function} [cb] Optional callback for system ready
     * @private
     * @returns Promise<void>
     * @deprecated It is no longer necessary to wait on ready
     */
    static ready(cb?: () => void): Promise<void>;
    /**
     * Sets the icon for the system tray
     * @param url The url of the icon to use in the system tray
     */
    static setTrayIcon(url: string, cb?: () => void): void;
    /**
     * Asynchronous method that passes the host specs of the system to the provided callback
     * @private
     * @param cb callback
     */
    static getHostSpecs(cb?: Function): Promise<any>;
    /**
     * Returns the InterApplicationBus
     * @private
     * @returns IAB
     */
    static get InterApplicationBus(): import("../FEA").FEAInterApplicationBus;
    /**
     * Launches an external application
     * @private
     */
    static get launchExternalProcess(): (options: import("../FEA").ExternalProcessLaunchInfo, callback?: (payload: {
        uuid: string;
    }) => void, errorCallback?: (reason: string) => void) => void;
    /**
     * Terminates an external application
     * @private
     */
    static get terminateExternalProcess(): (processUuid: string, timeout: number, callback?: (info: {
        result: "clean" | "terminated" | "failed";
    }) => void, errorCallback?: (reason: string) => void) => void;
    /**
     * Hard terminates Finsemble.
     *
     * (deprecated) Use `FSBL.shutdownApplication()`
     * @private
     */
    static get exit(): (callback?: () => void, errorCallback?: (reason: string) => void) => void;
    /**
     * Clears finsemble cache
     * @private
     */
    static clearCache(options: CacheOptions): Promise<void>;
    /**
     * Shows the chromium developer tools for the current window
     * @private
     * @returns IAB
     */
    static get showDeveloperTools(): (name: string, isView?: number | boolean | null, callback?: () => void, errorCallback?: (reason: string) => void) => void;
    /**
     * Returns runtime information
     * @private
     * @returns RunTimeInfo
     */
    /**
     * Adds an event listener
     * @private
     * @returns RunTimeInfo
     */
    static get addEventListener(): ({
        <K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
        (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
    } & typeof addEventListener) | ((type: "application-closed" | "application-crashed" | "application-created" | "application-started" | "apply-update-requested" | "desktop-icon-clicked" | "idle-state-changed" | "monitor-info-changed" | "new-window-created" | "session-changed" | "system-tray-click" | "system-tray-right-click" | "system-tray-mouse-enter" | "protocol-handler-triggered" | "log-fea" | "download-update" | "window-force-closed" | "browserView-content-loaded", listener: (event: import("../FEA").SystemBaseEvent | import("../FEA").DesktopIconClickedEvent | import("../FEA").IdleStateChangedEvent | import("../FEA").MonitorInfoChangedEvent | import("../FEA").SessionChangedEvent | import("../FEA").ProtocolHandlerEvent | import("../FEA").UpdateDownloadEvent | import("../FEA").WindowForceClosedEvent) => void, callback?: () => void, errorCallback?: (reason: string) => void) => void);
    static get removeEventListener(): ({
        <K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
        (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
    } & typeof removeEventListener) | ((type: "application-closed" | "application-crashed" | "application-created" | "application-started" | "apply-update-requested" | "desktop-icon-clicked" | "idle-state-changed" | "monitor-info-changed" | "new-window-created" | "session-changed" | "system-tray-click" | "system-tray-right-click" | "system-tray-mouse-enter" | "protocol-handler-triggered" | "log-fea" | "download-update" | "window-force-closed" | "browserView-content-loaded", listener: (event: import("../FEA").SystemBaseEvent | import("../FEA").DesktopIconClickedEvent | import("../FEA").IdleStateChangedEvent | import("../FEA").MonitorInfoChangedEvent | import("../FEA").SessionChangedEvent | import("../FEA").ProtocolHandlerEvent | import("../FEA").UpdateDownloadEvent) => void, callback?: () => void, errorCallback?: (reason: string) => void) => void);
    static get addSelectClientCertificateListener(): () => any;
    static get addCertificateErrorListener(): () => any;
    static getFEAInfo(cb?: (info: FEAInfo) => void): Promise<FEAInfo>;
    /**
     * getVersion
     * @private
     * @deprecated Use getFEAInfo instead.
     * @returns getVersion function
     */
    static get getVersion(): (callback?: (version: string) => void, errorCallback?: (reason: string) => void) => void;
    /**
     * getUpdateAvailable
     * @private
     * @returns getUpdateAvailable function
     */
    static get getUpdateAvailable(): (cb: (isUpdateAvailable: boolean) => void) => void;
    /**
     * (deprecated) Opens website with external browser
     * @returns openUrlWithBrowser function
     */
    static get openUrlWithBrowser(): (url: string, callback?: () => void, errorCallback?: (reason: string) => void) => void;
    /**
     * getProcessList
     * @private
     * @returns getProcessList function
     */
    static get getProcessList(): (callback?: (processInfoList: import("../FEA").ProcessInfo[]) => void, errorCallback?: (reason: string) => void) => void;
    /**
     * getProtocolString
     * @private
     * @returns getProtocolString function
     */
    static get getProtocolString(): (cb?: (data: string) => void) => Promise<string>;
    /**
     * hideSplashScreen
     * @private
     * @returns hideSplashScreen function
     */
    static get hideSplashScreen(): () => void;
    /**
     * notifyLoggerReady
     * @private
     */
    static notifyLoggerReady(): void;
    /**
     * updateCentralLoggerState
     * @private
     */
    static updateCentralLoggerState(loggerState: any): void;
    /**
     * Performs handshake with FEA to indicate the primary application started successfully
     * @private
     */
    static startupApplicationHandshake(): void;
    /**
     * Hard terminates the application.
     * This is called only by Finsemble's ShutdownManager to stop the entire application
     * after it has gracefully closed services. Do not call this directly. Use `FSBL.shutdownApplication()`.
     * @private
     */
    static terminate(): void;
    /**
     * Hard resets the application.
     * This is called only by Finsemble's ShutdownManager to restart the entire application
     * after it has gracefully closed services. Do not call this directly. Use `FSBL.restartApplication()`.
     * @private
     */
    static restart(): void;
    /**
     * Gets an environment variable by name
     * @param envVar The name of the environment variable to fetch
     * @param cb the optional callback
     * @returns a Promise that resolves to the environment variable value
     * @private
     */
    static getEnvironmentVariable(envVar: string, cb?: (variable: string) => void): Promise<string>;
}
export {};
//# sourceMappingURL=system.d.ts.map