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

import { IConfigurationService } from '../../configuration/common/configuration.mjs';
import { IProductService } from '../../product/common/productService.mjs';
import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from './gdprTypings.mjs';
import { ITelemetryData, ITelemetryInfo, ITelemetryService, TelemetryLevel } from './telemetry.mjs';
import { ITelemetryAppender } from './telemetryUtils.mjs';
export interface ITelemetryServiceConfig {
	appenders: ITelemetryAppender[];
	sendErrorTelemetry?: boolean;
	commonProperties?: Promise<{
		[name: string]: any;
	}>;
	piiPaths?: string[];
}
export declare class TelemetryService implements ITelemetryService {
	private _configurationService;
	private _productService;
	static readonly IDLE_START_EVENT_NAME = 'UserIdleStart';
	static readonly IDLE_STOP_EVENT_NAME = 'UserIdleStop';
	readonly _serviceBrand: undefined;
	private _appenders;
	private _commonProperties;
	private _experimentProperties;
	private _piiPaths;
	private _telemetryLevel;
	private _sendErrorTelemetry;
	private readonly _disposables;
	private _cleanupPatterns;
	constructor(
		config: ITelemetryServiceConfig,
		_configurationService: IConfigurationService,
		_productService: IProductService,
	);
	setExperimentProperty(name: string, value: string): void;
	private _updateTelemetryLevel;
	get sendErrorTelemetry(): boolean;
	get telemetryLevel(): TelemetryLevel;
	getTelemetryInfo(): Promise<ITelemetryInfo>;
	dispose(): void;
	private _log;
	publicLog(eventName: string, data?: ITelemetryData): Promise<any>;
	publicLog2<E extends ClassifiedEvent<OmitMetadata<T>> = never, T extends IGDPRProperty = never>(
		eventName: string,
		data?: StrictPropertyCheck<T, E>,
	): Promise<any>;
	publicLogError(errorEventName: string, data?: ITelemetryData): Promise<any>;
	publicLogError2<E extends ClassifiedEvent<OmitMetadata<T>> = never, T extends IGDPRProperty = never>(
		eventName: string,
		data?: StrictPropertyCheck<T, E>,
	): Promise<any>;
}
