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

import { Event } from '@sussudio/base/common/event.mjs';
import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { IProductService } from '../../product/common/productService.mjs';
import { IStorageService } from '../../storage/common/storage.mjs';
import { ITelemetryService } from '../../telemetry/common/telemetry.mjs';
import {
	IUserDataAutoSyncService,
	IUserDataSyncLogService,
	IUserDataSyncEnablementService,
	IUserDataSyncService,
	IUserDataSyncStoreManagementService,
	IUserDataSyncStoreService,
	UserDataSyncError,
} from './userDataSync.mjs';
import { IUserDataSyncAccountService } from './userDataSyncAccount.mjs';
import { IUserDataSyncMachinesService } from './userDataSyncMachines.mjs';
export declare class UserDataAutoSyncService extends Disposable implements IUserDataAutoSyncService {
	private readonly userDataSyncStoreManagementService;
	private readonly userDataSyncStoreService;
	private readonly userDataSyncEnablementService;
	private readonly userDataSyncService;
	private readonly logService;
	private readonly userDataSyncAccountService;
	private readonly telemetryService;
	private readonly userDataSyncMachinesService;
	private readonly storageService;
	_serviceBrand: any;
	private readonly autoSync;
	private successiveFailures;
	private lastSyncTriggerTime;
	private readonly syncTriggerDelayer;
	private suspendUntilRestart;
	private readonly _onError;
	readonly onError: Event<UserDataSyncError>;
	private lastSyncUrl;
	private get syncUrl();
	private set syncUrl(value);
	private previousProductQuality;
	private get productQuality();
	private set productQuality(value);
	constructor(
		productService: IProductService,
		userDataSyncStoreManagementService: IUserDataSyncStoreManagementService,
		userDataSyncStoreService: IUserDataSyncStoreService,
		userDataSyncEnablementService: IUserDataSyncEnablementService,
		userDataSyncService: IUserDataSyncService,
		logService: IUserDataSyncLogService,
		userDataSyncAccountService: IUserDataSyncAccountService,
		telemetryService: ITelemetryService,
		userDataSyncMachinesService: IUserDataSyncMachinesService,
		storageService: IStorageService,
	);
	private updateAutoSync;
	protected startAutoSync(): boolean;
	private isAutoSyncEnabled;
	turnOn(): Promise<void>;
	turnOff(everywhere: boolean, softTurnOffOnError?: boolean, donotRemoveMachine?: boolean): Promise<void>;
	private updateEnablement;
	private hasProductQualityChanged;
	private onDidFinishSync;
	private disableMachineEventually;
	private hasToDisableMachineEventually;
	private stopDisableMachineEventually;
	private sources;
	triggerSync(sources: string[], skipIfSyncedRecently: boolean, disableCache: boolean): Promise<void>;
	protected getSyncTriggerDelayTime(): number;
}
