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

import { Event } from '@sussudio/base/common/event.mjs';
import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { IProcessEnvironment } from '@sussudio/base/common/platform.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { IProductService } from '../../product/common/productService.mjs';
import {
	IShellLaunchConfig,
	ITerminalChildProcess,
	ITerminalLaunchError,
	IProcessProperty,
	IProcessPropertyMap as IProcessPropertyMap,
	ProcessPropertyType,
	TerminalShellType,
	IProcessReadyEvent,
	ITerminalProcessOptions,
} from '../common/terminal.mjs';
export declare class TerminalProcess extends Disposable implements ITerminalChildProcess {
	readonly shellLaunchConfig: IShellLaunchConfig;
	/**
	 * environment used for `findExecutable`
	 */
	private readonly _executableEnv;
	private readonly _options;
	private readonly _logService;
	private readonly _productService;
	readonly id = 0;
	readonly shouldPersist = false;
	private _properties;
	private static _lastKillOrStart;
	private _exitCode;
	private _exitMessage;
	private _closeTimeout;
	private _ptyProcess;
	private _currentTitle;
	private _processStartupComplete;
	private _isDisposed;
	private _windowsShellHelper;
	private _childProcessMonitor;
	private _titleInterval;
	private _writeQueue;
	private _writeTimeout;
	private _delayedResizer;
	private readonly _initialCwd;
	private readonly _ptyOptions;
	private _isPtyPaused;
	private _unacknowledgedCharCount;
	get exitMessage(): string | undefined;
	get currentTitle(): string;
	get shellType(): TerminalShellType;
	get hasChildProcesses(): boolean;
	private readonly _onProcessData;
	readonly onProcessData: Event<string>;
	private readonly _onProcessReady;
	readonly onProcessReady: Event<IProcessReadyEvent>;
	private readonly _onDidChangeProperty;
	readonly onDidChangeProperty: Event<IProcessProperty<any>>;
	private readonly _onProcessExit;
	readonly onProcessExit: Event<number>;
	constructor(
		shellLaunchConfig: IShellLaunchConfig,
		cwd: string,
		cols: number,
		rows: number,
		env: IProcessEnvironment,
		/**
		 * environment used for `findExecutable`
		 */
		_executableEnv: IProcessEnvironment,
		_options: ITerminalProcessOptions,
		_logService: ILogService,
		_productService: IProductService,
	);
	start(): Promise<ITerminalLaunchError | undefined>;
	private _validateCwd;
	private _validateExecutable;
	private setupPtyProcess;
	dispose(): void;
	private _setupTitlePolling;
	private _queueProcessExit;
	private _kill;
	private _throttleKillSpawn;
	private _sendProcessId;
	private _sendProcessTitle;
	shutdown(immediate: boolean): void;
	input(data: string, isBinary?: boolean): void;
	processBinary(data: string): Promise<void>;
	refreshProperty<T extends ProcessPropertyType>(type: T): Promise<IProcessPropertyMap[T]>;
	updateProperty<T extends ProcessPropertyType>(type: T, value: IProcessPropertyMap[T]): Promise<void>;
	private _startWrite;
	private _doWrite;
	resize(cols: number, rows: number): void;
	acknowledgeDataEvent(charCount: number): void;
	clearUnacknowledgedChars(): void;
	setUnicodeVersion(version: '6' | '11'): Promise<void>;
	getInitialCwd(): Promise<string>;
	getCwd(): Promise<string>;
	getLatency(): Promise<number>;
}
