/*---------------------------------------------------------------------------------------------
 *  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 { IDisposable } from '@sussudio/base/common/lifecycle.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import {
	IWorkspace,
	ISingleFolderWorkspaceIdentifier,
	IWorkspaceIdentifier,
} from '../../workspace/common/workspace.mjs';
export declare const ILabelService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<ILabelService>;
export interface ILabelService {
	readonly _serviceBrand: undefined;
	/**
	 * Gets the human readable label for a uri.
	 * If `relative` is passed returns a label relative to the workspace root that the uri belongs to.
	 * If `noPrefix` is passed does not tildify the label and also does not prepand the root name for relative labels in a multi root scenario.
	 * If `separator` is passed, will use that over the defined path separator of the formatter.
	 */
	getUriLabel(
		resource: URI,
		options?: {
			relative?: boolean;
			noPrefix?: boolean;
			separator?: '/' | '\\';
		},
	): string;
	getUriBasenameLabel(resource: URI): string;
	getWorkspaceLabel(
		workspace: IWorkspaceIdentifier | ISingleFolderWorkspaceIdentifier | URI | IWorkspace,
		options?: {
			verbose: Verbosity;
		},
	): string;
	getHostLabel(scheme: string, authority?: string): string;
	getHostTooltip(scheme: string, authority?: string): string | undefined;
	getSeparator(scheme: string, authority?: string): '/' | '\\';
	registerFormatter(formatter: ResourceLabelFormatter): IDisposable;
	onDidChangeFormatters: Event<IFormatterChangeEvent>;
	/**
	 * Registers a formatter that's cached for the machine beyond the lifecycle
	 * of the current window. Disposing the formatter _will not_ remove it from
	 * the cache.
	 */
	registerCachedFormatter(formatter: ResourceLabelFormatter): IDisposable;
}
export declare const enum Verbosity {
	SHORT = 0,
	MEDIUM = 1,
	LONG = 2,
}
export interface IFormatterChangeEvent {
	scheme: string;
}
export interface ResourceLabelFormatter {
	scheme: string;
	authority?: string;
	priority?: boolean;
	formatting: ResourceLabelFormatting;
}
export interface ResourceLabelFormatting {
	label: string;
	separator: '/' | '\\' | '';
	tildify?: boolean;
	normalizeDriveLetter?: boolean;
	workspaceSuffix?: string;
	workspaceTooltip?: string;
	authorityPrefix?: string;
	stripPathStartingSeparator?: boolean;
}
