/*---------------------------------------------------------------------------------------------
 *  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 "../../../base/common/collections.mjs";
import { ProcessItem } from "../../../base/common/processes.mjs";
import { UriComponents } from "../../../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;
}
