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

import { IStringDictionary } from '@sussudio/base/common/collections.mjs';
import { ProcessItem } from '@sussudio/base/common/processes.mjs';
import { UriComponents } from '@sussudio/base/common/uri.mjs';
import { IWorkspace } from '../../workspace/common/workspace.mjs';
export declare const ID = 'diagnosticsService';
export declare const IDiagnosticsService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IDiagnosticsService>;
export interface IDiagnosticsService {
	readonly _serviceBrand: undefined;
	getPerformanceInfo(
		mainProcessInfo: IMainProcessDiagnostics,
		remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[],
	): Promise<PerformanceInfo>;
	getSystemInfo(
		mainProcessInfo: IMainProcessDiagnostics,
		remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[],
	): Promise<SystemInfo>;
	getDiagnostics(
		mainProcessInfo: IMainProcessDiagnostics,
		remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[],
	): Promise<string>;
	getWorkspaceFileExtensions(workspace: IWorkspace): Promise<{
		extensions: string[];
	}>;
	reportWorkspaceStats(workspace: IWorkspaceInformation): Promise<void>;
}
export interface IMachineInfo {
	os: string;
	cpus?: string;
	memory: string;
	vmHint: string;
	linuxEnv?: ILinuxEnv;
}
export interface ILinuxEnv {
	desktopSession?: string;
	xdgSessionDesktop?: string;
	xdgCurrentDesktop?: string;
	xdgSessionType?: string;
}
export interface IDiagnosticInfo {
	machineInfo: IMachineInfo;
	workspaceMetadata?: IStringDictionary<WorkspaceStats>;
	processes?: ProcessItem;
}
export interface SystemInfo extends IMachineInfo {
	processArgs: string;
	gpuStatus: any;
	screenReader: string;
	remoteData: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[];
	load?: string;
}
export interface IRemoteDiagnosticInfo extends IDiagnosticInfo {
	hostName: string;
}
export interface IRemoteDiagnosticError {
	hostName: string;
	errorMessage: string;
}
export interface IDiagnosticInfoOptions {
	includeProcesses?: boolean;
	folders?: UriComponents[];
	includeExtensions?: boolean;
}
export interface WorkspaceStatItem {
	name: string;
	count: number;
}
export interface WorkspaceStats {
	fileTypes: WorkspaceStatItem[];
	configFiles: WorkspaceStatItem[];
	fileCount: number;
	maxFilesReached: boolean;
	launchConfigFiles: WorkspaceStatItem[];
}
export interface PerformanceInfo {
	processInfo?: string;
	workspaceInfo?: string;
}
export interface IWorkspaceInformation extends IWorkspace {
	telemetryId: string | undefined;
	rendererSessionId: string;
}
export declare function isRemoteDiagnosticError(x: any): x is IRemoteDiagnosticError;
export declare class NullDiagnosticsService implements IDiagnosticsService {
	_serviceBrand: undefined;
	getPerformanceInfo(
		mainProcessInfo: IMainProcessDiagnostics,
		remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[],
	): Promise<PerformanceInfo>;
	getSystemInfo(
		mainProcessInfo: IMainProcessDiagnostics,
		remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[],
	): Promise<SystemInfo>;
	getDiagnostics(
		mainProcessInfo: IMainProcessDiagnostics,
		remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[],
	): Promise<string>;
	getWorkspaceFileExtensions(workspace: IWorkspace): Promise<{
		extensions: string[];
	}>;
	reportWorkspaceStats(workspace: IWorkspaceInformation): Promise<void>;
}
export interface IWindowDiagnostics {
	readonly pid: number;
	readonly title: string;
	readonly folderURIs: UriComponents[];
	readonly remoteAuthority?: string;
}
export interface IMainProcessDiagnostics {
	readonly mainPID: number;
	readonly mainArguments: string[];
	readonly windows: IWindowDiagnostics[];
	readonly screenReader: boolean;
	readonly gpuFeatureStatus: any;
}
