/*---------------------------------------------------------------------------------------------
 *  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 "../../../base/common/cancellation.mjs";
import { URI } from "../../../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 {};
