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

import { CancellationToken } from '@sussudio/base/common/cancellation.mjs';
import { Disposable, DisposableStore, IDisposable } from '@sussudio/base/common/lifecycle.mjs';
import { ICommandService } from '../../commands/common/commands.mjs';
import { IConfigurationService } from '../../configuration/common/configuration.mjs';
import { IDialogService } from '../../dialogs/common/dialogs.mjs';
import { IInstantiationService } from '../../instantiation/common/instantiation.mjs';
import { IKeybindingService } from '../../keybinding/common/keybinding.mjs';
import {
	IPickerQuickAccessItem,
	IPickerQuickAccessProviderOptions,
	PickerQuickAccessProvider,
} from './pickerQuickAccess.mjs';
import { IQuickPickSeparator } from '../common/quickInput.mjs';
import { IStorageService } from '../../storage/common/storage.mjs';
import { ITelemetryService } from '../../telemetry/common/telemetry.mjs';
export interface ICommandQuickPick extends IPickerQuickAccessItem {
	commandId: string;
	commandAlias?: string;
}
export interface ICommandsQuickAccessOptions extends IPickerQuickAccessProviderOptions<ICommandQuickPick> {
	showAlias: boolean;
}
export declare abstract class AbstractCommandsQuickAccessProvider
	extends PickerQuickAccessProvider<ICommandQuickPick>
	implements IDisposable
{
	private readonly instantiationService;
	private readonly keybindingService;
	private readonly commandService;
	private readonly telemetryService;
	private readonly dialogService;
	static PREFIX: string;
	private static WORD_FILTER;
	private readonly commandsHistory;
	protected readonly options: ICommandsQuickAccessOptions;
	constructor(
		options: ICommandsQuickAccessOptions,
		instantiationService: IInstantiationService,
		keybindingService: IKeybindingService,
		commandService: ICommandService,
		telemetryService: ITelemetryService,
		dialogService: IDialogService,
	);
	protected _getPicks(
		filter: string,
		_disposables: DisposableStore,
		token: CancellationToken,
	): Promise<Array<ICommandQuickPick | IQuickPickSeparator>>;
	/**
	 * Subclasses to provide the actual command entries.
	 */
	protected abstract getCommandPicks(token: CancellationToken): Promise<Array<ICommandQuickPick>>;
}
export declare class CommandsHistory extends Disposable {
	private readonly storageService;
	private readonly configurationService;
	static readonly DEFAULT_COMMANDS_HISTORY_LENGTH = 50;
	private static readonly PREF_KEY_CACHE;
	private static readonly PREF_KEY_COUNTER;
	private static cache;
	private static counter;
	private configuredCommandsHistoryLength;
	constructor(storageService: IStorageService, configurationService: IConfigurationService);
	private registerListeners;
	private updateConfiguration;
	private load;
	push(commandId: string): void;
	peek(commandId: string): number | undefined;
	static saveState(storageService: IStorageService): void;
	static getConfiguredCommandHistoryLength(configurationService: IConfigurationService): number;
	static clearHistory(configurationService: IConfigurationService, storageService: IStorageService): void;
}
