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

import { BrowserWindow, Rectangle } from 'electron';
import { CancellationToken } from '@sussudio/base/common/cancellation.mjs';
import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { ISerializableCommandAction } from '../../action/common/action.mjs';
import { IBackupMainService } from '../../backup/electron-main/backup.mjs';
import { IConfigurationService } from '../../configuration/common/configuration.mjs';
import { IDialogMainService } from '../../dialogs/electron-main/dialogMainService.mjs';
import { NativeParsedArgs } from '../../environment/common/argv.mjs';
import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.mjs';
import { IFileService } from '../../files/common/files.mjs';
import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { IProductService } from '../../product/common/productService.mjs';
import { IProtocolMainService } from '../../protocol/electron-main/protocol.mjs';
import {
	IApplicationStorageMainService,
	IStorageMainService,
} from '../../storage/electron-main/storageMainService.mjs';
import { ITelemetryService } from '../../telemetry/common/telemetry.mjs';
import { IThemeMainService } from '../../theme/electron-main/themeMainService.mjs';
import { INativeWindowConfiguration } from '../../window/common/window.mjs';
import { IWindowsMainService } from './windows.mjs';
import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from '../../workspace/common/workspace.mjs';
import { IWorkspacesManagementMainService } from '../../workspaces/electron-main/workspacesManagementMainService.mjs';
import { IWindowState, ICodeWindow, ILoadEvent } from '../../window/electron-main/window.mjs';
import { IPolicyService } from '../../policy/common/policy.mjs';
import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.mjs';
import { IStateMainService } from '../../state/electron-main/state.mjs';
import { IUserDataProfilesMainService } from '../../userDataProfile/electron-main/userDataProfile.mjs';
import { INativeHostMainService } from '../../native/electron-main/nativeHostMainService.mjs';
export interface IWindowCreationOptions {
	readonly state: IWindowState;
	readonly extensionDevelopmentPath?: string[];
	readonly isExtensionTestHost?: boolean;
}
interface ILoadOptions {
	readonly isReload?: boolean;
	readonly disableExtensions?: boolean;
}
export declare class CodeWindow extends Disposable implements ICodeWindow {
	private readonly logService;
	private readonly environmentMainService;
	private readonly policyService;
	private readonly userDataProfilesService;
	private readonly fileService;
	private readonly applicationStorageMainService;
	private readonly storageMainService;
	private readonly configurationService;
	private readonly themeMainService;
	private readonly workspacesManagementMainService;
	private readonly backupMainService;
	private readonly telemetryService;
	private readonly dialogMainService;
	private readonly lifecycleMainService;
	private readonly productService;
	private readonly protocolMainService;
	private readonly windowsMainService;
	private readonly stateMainService;
	private readonly nativeHostMainService;
	private static readonly windowControlHeightStateStorageKey;
	private static sandboxState;
	private readonly _onWillLoad;
	readonly onWillLoad: import('@sussudio/base/common/event.mjs').Event<ILoadEvent>;
	private readonly _onDidSignalReady;
	readonly onDidSignalReady: import('@sussudio/base/common/event.mjs').Event<void>;
	private readonly _onDidTriggerSystemContextMenu;
	readonly onDidTriggerSystemContextMenu: import('@sussudio/base/common/event.mjs').Event<{
		x: number;
		y: number;
	}>;
	private readonly _onDidClose;
	readonly onDidClose: import('@sussudio/base/common/event.mjs').Event<void>;
	private readonly _onDidDestroy;
	readonly onDidDestroy: import('@sussudio/base/common/event.mjs').Event<void>;
	private _id;
	get id(): number;
	private _win;
	get win(): BrowserWindow | null;
	private _lastFocusTime;
	get lastFocusTime(): number;
	get backupPath(): string | undefined;
	get openedWorkspace(): IWorkspaceIdentifier | ISingleFolderWorkspaceIdentifier | undefined;
	get profile(): IUserDataProfile | undefined;
	get remoteAuthority(): string | undefined;
	private _config;
	get config(): INativeWindowConfiguration | undefined;
	get isExtensionDevelopmentHost(): boolean;
	get isExtensionTestHost(): boolean;
	get isExtensionDevelopmentTestFromCli(): boolean;
	private readonly windowState;
	private currentMenuBarVisibility;
	private transientIsNativeFullScreen;
	private joinNativeFullScreenTransition;
	private representedFilename;
	private documentEdited;
	private readonly hasWindowControlOverlay;
	private readonly whenReadyCallbacks;
	private readonly touchBarGroups;
	private currentHttpProxy;
	private currentNoProxy;
	private readonly configObjectUrl;
	private pendingLoadConfig;
	private wasLoaded;
	constructor(
		config: IWindowCreationOptions,
		logService: ILogService,
		environmentMainService: IEnvironmentMainService,
		policyService: IPolicyService,
		userDataProfilesService: IUserDataProfilesMainService,
		fileService: IFileService,
		applicationStorageMainService: IApplicationStorageMainService,
		storageMainService: IStorageMainService,
		configurationService: IConfigurationService,
		themeMainService: IThemeMainService,
		workspacesManagementMainService: IWorkspacesManagementMainService,
		backupMainService: IBackupMainService,
		telemetryService: ITelemetryService,
		dialogMainService: IDialogMainService,
		lifecycleMainService: ILifecycleMainService,
		productService: IProductService,
		protocolMainService: IProtocolMainService,
		windowsMainService: IWindowsMainService,
		stateMainService: IStateMainService,
		nativeHostMainService: INativeHostMainService,
	);
	setRepresentedFilename(filename: string): void;
	getRepresentedFilename(): string | undefined;
	setDocumentEdited(edited: boolean): void;
	isDocumentEdited(): boolean;
	focus(options?: { force: boolean }): void;
	private readyState;
	setReady(): void;
	ready(): Promise<ICodeWindow>;
	get isReady(): boolean;
	get whenClosedOrLoaded(): Promise<void>;
	private registerListeners;
	private marketplaceHeadersPromise;
	private getMarketplaceHeaders;
	private onWindowError;
	private handleWindowsAdminCrash;
	private destroyWindow;
	private onDidDeleteUntitledWorkspace;
	private onConfigurationUpdated;
	addTabbedWindow(window: ICodeWindow): void;
	load(configuration: INativeWindowConfiguration, options?: ILoadOptions): void;
	private updateConfiguration;
	reload(cli?: NativeParsedArgs): Promise<void>;
	private validateWorkspaceBeforeReload;
	serializeWindowState(): IWindowState;
	updateWindowControls(options: { height?: number; backgroundColor?: string; foregroundColor?: string }): void;
	private restoreWindowState;
	private validateWindowState;
	private getWorkingArea;
	getBounds(): Rectangle;
	toggleFullScreen(): void;
	private setFullScreen;
	get isFullScreen(): boolean;
	private setNativeFullScreen;
	private doSetNativeFullScreen;
	private setSimpleFullScreen;
	private useNativeFullScreen;
	isMinimized(): boolean;
	private getMenuBarVisibility;
	private setMenuBarVisibility;
	private doSetMenuBarVisibility;
	handleTitleDoubleClick(): void;
	close(): void;
	sendWhenReady(channel: string, token: CancellationToken, ...args: any[]): void;
	send(channel: string, ...args: any[]): void;
	updateTouchBar(groups: ISerializableCommandAction[][]): void;
	private createTouchBar;
	private createTouchBarGroup;
	private createTouchBarGroupSegments;
	dispose(): void;
}
export {};
