/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import { VSBuffer } from "../../../base/common/buffer.mjs";
import { Event } from "../../../base/common/event.mjs";
import { URI } from "../../../base/common/uri.mjs";
import { MessageBoxOptions, MessageBoxReturnValue, MouseInputEvent, OpenDevToolsOptions, OpenDialogOptions, OpenDialogReturnValue, SaveDialogOptions, SaveDialogReturnValue } from "../../../base/parts/sandbox/common/electronTypes.mjs";
import { ISerializableCommandAction } from "../../action/common/action.mjs";
import { INativeOpenDialogOptions } from "../../dialogs/common/dialogs.mjs";
import { IV8Profile } from "../../profiling/common/profiling.mjs";
import { IPartsSplash } from "../../theme/common/themeService.mjs";
import { IColorScheme, IOpenedWindow, IOpenEmptyWindowOptions, IOpenWindowOptions, IWindowOpenable } from "../../window/common/window.mjs";
export interface ICPUProperties {
    model: string;
    speed: number;
}
export interface IOSProperties {
    type: string;
    release: string;
    arch: string;
    platform: string;
    cpus: ICPUProperties[];
}
export interface IOSStatistics {
    totalmem: number;
    freemem: number;
    loadavg: number[];
}
export interface ICommonNativeHostService {
    readonly _serviceBrand: undefined;
    readonly windowId: number;
    readonly onDidOpenWindow: Event<number>;
    readonly onDidMaximizeWindow: Event<number>;
    readonly onDidUnmaximizeWindow: Event<number>;
    readonly onDidFocusWindow: Event<number>;
    readonly onDidBlurWindow: Event<number>;
    readonly onDidChangeDisplay: Event<void>;
    readonly onDidResumeOS: Event<unknown>;
    readonly onDidChangeColorScheme: Event<IColorScheme>;
    readonly onDidChangePassword: Event<{
        service: string;
        account: string;
    }>;
    readonly onDidTriggerSystemContextMenu: Event<{
        windowId: number;
        x: number;
        y: number;
    }>;
    getWindows(): Promise<IOpenedWindow[]>;
    getWindowCount(): Promise<number>;
    getActiveWindowId(): Promise<number | undefined>;
    openWindow(options?: IOpenEmptyWindowOptions): Promise<void>;
    openWindow(toOpen: IWindowOpenable[], options?: IOpenWindowOptions): Promise<void>;
    toggleFullScreen(): Promise<void>;
    handleTitleDoubleClick(): Promise<void>;
    isMaximized(): Promise<boolean>;
    maximizeWindow(): Promise<void>;
    unmaximizeWindow(): Promise<void>;
    minimizeWindow(): Promise<void>;
    /**
     * Only supported on Windows and macOS. Updates the window controls to match the title bar size.
     *
     * @param options `backgroundColor` and `foregroundColor` are only supported on Windows
     */
    updateWindowControls(options: {
        height?: number;
        backgroundColor?: string;
        foregroundColor?: string;
    }): Promise<void>;
    setMinimumSize(width: number | undefined, height: number | undefined): Promise<void>;
    saveWindowSplash(splash: IPartsSplash): Promise<void>;
    /**
     * Make the window focused.
     *
     * @param options Pass `force: true` if you want to make the window take
     * focus even if the application does not have focus currently. This option
     * should only be used if it is necessary to steal focus from the current
     * focused application which may not be VSCode.
     */
    focusWindow(options?: {
        windowId?: number;
        force?: boolean;
    }): Promise<void>;
    showMessageBox(options: MessageBoxOptions): Promise<MessageBoxReturnValue>;
    showSaveDialog(options: SaveDialogOptions): Promise<SaveDialogReturnValue>;
    showOpenDialog(options: OpenDialogOptions): Promise<OpenDialogReturnValue>;
    pickFileFolderAndOpen(options: INativeOpenDialogOptions): Promise<void>;
    pickFileAndOpen(options: INativeOpenDialogOptions): Promise<void>;
    pickFolderAndOpen(options: INativeOpenDialogOptions): Promise<void>;
    pickWorkspaceAndOpen(options: INativeOpenDialogOptions): Promise<void>;
    showItemInFolder(path: string): Promise<void>;
    setRepresentedFilename(path: string): Promise<void>;
    setDocumentEdited(edited: boolean): Promise<void>;
    openExternal(url: string): Promise<boolean>;
    moveItemToTrash(fullPath: string): Promise<void>;
    isAdmin(): Promise<boolean>;
    writeElevated(source: URI, target: URI, options?: {
        unlock?: boolean;
    }): Promise<void>;
    getOSProperties(): Promise<IOSProperties>;
    getOSStatistics(): Promise<IOSStatistics>;
    getOSVirtualMachineHint(): Promise<number>;
    getOSColorScheme(): Promise<IColorScheme>;
    hasWSLFeatureInstalled(): Promise<boolean>;
    killProcess(pid: number, code: string): Promise<void>;
    readClipboardText(type?: 'selection' | 'clipboard'): Promise<string>;
    writeClipboardText(text: string, type?: 'selection' | 'clipboard'): Promise<void>;
    readClipboardFindText(): Promise<string>;
    writeClipboardFindText(text: string): Promise<void>;
    writeClipboardBuffer(format: string, buffer: VSBuffer, type?: 'selection' | 'clipboard'): Promise<void>;
    readClipboardBuffer(format: string): Promise<VSBuffer>;
    hasClipboard(format: string, type?: 'selection' | 'clipboard'): Promise<boolean>;
    newWindowTab(): Promise<void>;
    showPreviousWindowTab(): Promise<void>;
    showNextWindowTab(): Promise<void>;
    moveWindowTabToNewWindow(): Promise<void>;
    mergeAllWindowTabs(): Promise<void>;
    toggleWindowTabsBar(): Promise<void>;
    updateTouchBar(items: ISerializableCommandAction[][]): Promise<void>;
    installShellCommand(): Promise<void>;
    uninstallShellCommand(): Promise<void>;
    notifyReady(): Promise<void>;
    relaunch(options?: {
        addArgs?: string[];
        removeArgs?: string[];
    }): Promise<void>;
    reload(options?: {
        disableExtensions?: boolean;
    }): Promise<void>;
    closeWindow(): Promise<void>;
    closeWindowById(windowId: number): Promise<void>;
    quit(): Promise<void>;
    exit(code: number): Promise<void>;
    openDevTools(options?: OpenDevToolsOptions): Promise<void>;
    toggleDevTools(): Promise<void>;
    toggleSharedProcessWindow(): Promise<void>;
    sendInputEvent(event: MouseInputEvent): Promise<void>;
    enableSandbox(enabled: boolean): Promise<void>;
    profileRenderer(session: string, duration: number): Promise<IV8Profile>;
    resolveProxy(url: string): Promise<string | undefined>;
    findFreePort(startPort: number, giveUpAfter: number, timeout: number, stride?: number): Promise<number>;
    windowsGetStringRegKey(hive: 'HKEY_CURRENT_USER' | 'HKEY_LOCAL_MACHINE' | 'HKEY_CLASSES_ROOT' | 'HKEY_USERS' | 'HKEY_CURRENT_CONFIG', path: string, name: string): Promise<string | undefined>;
}
