/*---------------------------------------------------------------------------------------------
 *  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 { URI } from '@sussudio/base/common/uri.mjs';
import { IConfigurationService } from '../../configuration/common/configuration.mjs';
import { IEnvironmentService } from '../../environment/common/environment.mjs';
import { IExtensionManagementService } from '../../extensionManagement/common/extensionManagement.mjs';
import { IFileService } from '../../files/common/files.mjs';
import { IStorageService } from '../../storage/common/storage.mjs';
import { ITelemetryService } from '../../telemetry/common/telemetry.mjs';
import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.mjs';
import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.mjs';
import {
	AbstractInitializer,
	AbstractJsonFileSynchroniser,
	IAcceptResult,
	IFileResourcePreview,
	IMergeResult,
} from './abstractSynchronizer.mjs';
import {
	IRemoteUserData,
	IUserDataSyncBackupStoreService,
	IUserDataSyncConfiguration,
	IUserDataSynchroniser,
	IUserDataSyncLogService,
	IUserDataSyncEnablementService,
	IUserDataSyncStoreService,
	IUserDataSyncUtilService,
	IUserDataResourceManifest,
} from './userDataSync.mjs';
interface ISettingsResourcePreview extends IFileResourcePreview {
	previewResult: IMergeResult;
}
export interface ISettingsSyncContent {
	settings: string;
}
export declare function parseSettingsSyncContent(syncContent: string): ISettingsSyncContent;
export declare class SettingsSynchroniser extends AbstractJsonFileSynchroniser implements IUserDataSynchroniser {
	private readonly extensionManagementService;
	protected readonly version: number;
	readonly previewResource: URI;
	readonly baseResource: URI;
	readonly localResource: URI;
	readonly remoteResource: URI;
	readonly acceptedResource: URI;
	constructor(
		profile: IUserDataProfile,
		collection: string | undefined,
		fileService: IFileService,
		environmentService: IEnvironmentService,
		storageService: IStorageService,
		userDataSyncStoreService: IUserDataSyncStoreService,
		userDataSyncBackupStoreService: IUserDataSyncBackupStoreService,
		logService: IUserDataSyncLogService,
		userDataSyncUtilService: IUserDataSyncUtilService,
		configurationService: IConfigurationService,
		userDataSyncEnablementService: IUserDataSyncEnablementService,
		telemetryService: ITelemetryService,
		extensionManagementService: IExtensionManagementService,
		uriIdentityService: IUriIdentityService,
	);
	getRemoteUserDataSyncConfiguration(manifest: IUserDataResourceManifest | null): Promise<IUserDataSyncConfiguration>;
	protected generateSyncPreview(
		remoteUserData: IRemoteUserData,
		lastSyncUserData: IRemoteUserData | null,
		isRemoteDataFromCurrentMachine: boolean,
	): Promise<ISettingsResourcePreview[]>;
	protected hasRemoteChanged(lastSyncUserData: IRemoteUserData): Promise<boolean>;
	protected getMergeResult(resourcePreview: ISettingsResourcePreview, token: CancellationToken): Promise<IMergeResult>;
	protected getAcceptResult(
		resourcePreview: ISettingsResourcePreview,
		resource: URI,
		content: string | null | undefined,
		token: CancellationToken,
	): Promise<IAcceptResult>;
	protected applyResult(
		remoteUserData: IRemoteUserData,
		lastSyncUserData: IRemoteUserData | null,
		resourcePreviews: [ISettingsResourcePreview, IAcceptResult][],
		force: boolean,
	): Promise<void>;
	hasLocalData(): Promise<boolean>;
	resolveContent(uri: URI): Promise<string | null>;
	protected resolvePreviewContent(resource: URI): Promise<string | null>;
	private getSettingsSyncContent;
	private parseSettingsSyncContent;
	private toSettingsSyncContent;
	private _defaultIgnoredSettings;
	private getIgnoredSettings;
	private validateContent;
}
export declare class SettingsInitializer extends AbstractInitializer {
	constructor(
		fileService: IFileService,
		userDataProfilesService: IUserDataProfilesService,
		environmentService: IEnvironmentService,
		logService: IUserDataSyncLogService,
		storageService: IStorageService,
		uriIdentityService: IUriIdentityService,
	);
	doInitialize(remoteUserData: IRemoteUserData): Promise<void>;
	private isEmpty;
	private parseSettingsSyncContent;
}
export {};
