/*---------------------------------------------------------------------------------------------
 *  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 { Emitter, Event } from '@sussudio/base/common/event.mjs';
import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
export type PolicyName = string;
export type PolicyValue = string | number;
export type PolicyDefinition = {
	type: 'string' | 'number';
};
export declare const IPolicyService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IPolicyService>;
export interface IPolicyService {
	readonly _serviceBrand: undefined;
	readonly onDidChange: Event<readonly PolicyName[]>;
	updatePolicyDefinitions(
		policyDefinitions: IStringDictionary<PolicyDefinition>,
	): Promise<IStringDictionary<PolicyValue>>;
	getPolicyValue(name: PolicyName): PolicyValue | undefined;
	serialize():
		| IStringDictionary<{
				definition: PolicyDefinition;
				value: PolicyValue;
		  }>
		| undefined;
}
export declare abstract class AbstractPolicyService extends Disposable implements IPolicyService {
	readonly _serviceBrand: undefined;
	protected policyDefinitions: IStringDictionary<PolicyDefinition>;
	protected policies: Map<string, PolicyValue>;
	protected readonly _onDidChange: Emitter<readonly string[]>;
	readonly onDidChange: Event<readonly string[]>;
	updatePolicyDefinitions(
		policyDefinitions: IStringDictionary<PolicyDefinition>,
	): Promise<IStringDictionary<PolicyValue>>;
	getPolicyValue(name: PolicyName): PolicyValue | undefined;
	serialize(): IStringDictionary<{
		definition: PolicyDefinition;
		value: PolicyValue;
	}>;
	protected abstract _updatePolicyDefinitions(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<void>;
}
export declare class NullPolicyService implements IPolicyService {
	readonly _serviceBrand: undefined;
	readonly onDidChange: Event<any>;
	updatePolicyDefinitions(): Promise<{}>;
	getPolicyValue(): undefined;
	serialize(): undefined;
}
