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

import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import { IConfigurationService } from '../../configuration/common/configuration.mjs';
import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { IStateMainService } from '../../state/electron-main/state.mjs';
import { INativeWindowConfiguration } from '../../window/common/window.mjs';
import { IWindowsMainService } from './windows.mjs';
import { IWindowState as IWindowUIState } from '../../window/electron-main/window.mjs';
import { IWorkspaceIdentifier } from '../../workspace/common/workspace.mjs';
export interface IWindowState {
	readonly windowId?: number;
	workspace?: IWorkspaceIdentifier;
	folderUri?: URI;
	backupPath?: string;
	remoteAuthority?: string;
	uiState: IWindowUIState;
}
export interface IWindowsState {
	lastActiveWindow?: IWindowState;
	lastPluginDevelopmentHostWindow?: IWindowState;
	openedWindows: IWindowState[];
}
interface INewWindowState extends IWindowUIState {
	hasDefaultState?: boolean;
}
interface ISerializedWindowsState {
	readonly lastActiveWindow?: ISerializedWindowState;
	readonly lastPluginDevelopmentHostWindow?: ISerializedWindowState;
	readonly openedWindows: ISerializedWindowState[];
}
interface ISerializedWindowState {
	readonly workspaceIdentifier?: {
		id: string;
		configURIPath: string;
	};
	readonly folder?: string;
	readonly backupPath?: string;
	readonly remoteAuthority?: string;
	readonly uiState: IWindowUIState;
}
export declare class WindowsStateHandler extends Disposable {
	private readonly windowsMainService;
	private readonly stateMainService;
	private readonly lifecycleMainService;
	private readonly logService;
	private readonly configurationService;
	private static readonly windowsStateStorageKey;
	get state(): IWindowsState;
	private readonly _state;
	private lastClosedState;
	private shuttingDown;
	constructor(
		windowsMainService: IWindowsMainService,
		stateMainService: IStateMainService,
		lifecycleMainService: ILifecycleMainService,
		logService: ILogService,
		configurationService: IConfigurationService,
	);
	private registerListeners;
	private onBeforeShutdown;
	private saveWindowsState;
	private onBeforeCloseWindow;
	private toWindowState;
	getNewWindowState(configuration: INativeWindowConfiguration): INewWindowState;
	private doGetNewWindowState;
	private ensureNoOverlap;
}
export declare function restoreWindowsState(data: ISerializedWindowsState | undefined): IWindowsState;
export declare function getWindowsStateStoreData(windowsState: IWindowsState): IWindowsState;
export {};
