/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { WebContents } from 'electron';
import { Event } from '@sussudio/base/common/event.mjs';
import { IProcessEnvironment } from '@sussudio/base/common/platform.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import { NativeParsedArgs } from '../../environment/common/argv.mjs';
import { ICodeWindow } from '../../window/electron-main/window.mjs';
import { IOpenEmptyWindowOptions, IWindowOpenable } from '../../window/common/window.mjs';
export declare const IWindowsMainService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IWindowsMainService>;
export interface IWindowsMainService {
	readonly _serviceBrand: undefined;
	readonly onDidChangeWindowsCount: Event<IWindowsCountChangedEvent>;
	readonly onDidOpenWindow: Event<ICodeWindow>;
	readonly onDidSignalReadyWindow: Event<ICodeWindow>;
	readonly onDidTriggerSystemContextMenu: Event<{
		window: ICodeWindow;
		x: number;
		y: number;
	}>;
	readonly onDidDestroyWindow: Event<ICodeWindow>;
	open(openConfig: IOpenConfiguration): Promise<ICodeWindow[]>;
	openEmptyWindow(openConfig: IOpenEmptyConfiguration, options?: IOpenEmptyWindowOptions): Promise<ICodeWindow[]>;
	openExtensionDevelopmentHostWindow(
		extensionDevelopmentPath: string[],
		openConfig: IOpenConfiguration,
	): Promise<ICodeWindow[]>;
	openExistingWindow(window: ICodeWindow, openConfig: IOpenConfiguration): void;
	sendToFocused(channel: string, ...args: any[]): void;
	sendToAll(channel: string, payload?: any, windowIdsToIgnore?: number[]): void;
	getWindows(): ICodeWindow[];
	getWindowCount(): number;
	getFocusedWindow(): ICodeWindow | undefined;
	getLastActiveWindow(): ICodeWindow | undefined;
	getWindowById(windowId: number): ICodeWindow | undefined;
	getWindowByWebContents(webContents: WebContents): ICodeWindow | undefined;
}
export interface IWindowsCountChangedEvent {
	readonly oldCount: number;
	readonly newCount: number;
}
export declare const enum OpenContext {
	CLI = 0,
	DOCK = 1,
	MENU = 2,
	DIALOG = 3,
	DESKTOP = 4,
	API = 5,
}
export interface IBaseOpenConfiguration {
	readonly context: OpenContext;
	readonly contextWindowId?: number;
}
export interface IOpenConfiguration extends IBaseOpenConfiguration {
	readonly cli: NativeParsedArgs;
	readonly userEnv?: IProcessEnvironment;
	readonly urisToOpen?: IWindowOpenable[];
	readonly waitMarkerFileURI?: URI;
	readonly preferNewWindow?: boolean;
	readonly forceNewWindow?: boolean;
	readonly forceNewTabbedWindow?: boolean;
	readonly forceReuseWindow?: boolean;
	readonly forceEmpty?: boolean;
	readonly diffMode?: boolean;
	readonly mergeMode?: boolean;
	addMode?: boolean;
	readonly gotoLineMode?: boolean;
	readonly initialStartup?: boolean;
	readonly noRecentEntry?: boolean;
	/**
	 * The remote authority to use when windows are opened with either
	 * - no workspace (empty window)
	 * - a workspace that is neither `file://` nor `vscode-remote://`
	 */
	readonly remoteAuthority?: string;
	readonly forceProfile?: string;
	readonly forceTempProfile?: boolean;
}
export interface IOpenEmptyConfiguration extends IBaseOpenConfiguration {}
