/*---------------------------------------------------------------------------------------------
 *  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 "../../../base/common/event.mjs";
import { IConfigurationService } from "../../configuration/common/configuration.mjs";
import { IEnvironmentMainService } from "../../environment/electron-main/environmentMainService.mjs";
import { ILifecycleMainService } from "../../lifecycle/electron-main/lifecycleMainService.mjs";
import { ILogService } from "../../log/common/log.mjs";
import { IProductService } from "../../product/common/productService.mjs";
import { IRequestService } from "../../request/common/request.mjs";
import { AvailableForDownload, IUpdateService, State, UpdateType } from "../common/update.mjs";
export declare function createUpdateURL(platform: string, quality: string, productService: IProductService): string;
export type UpdateNotAvailableClassification = {
    owner: 'joaomoreno';
    explicit: {
        classification: 'SystemMetaData';
        purpose: 'FeatureInsight';
        isMeasurement: true;
        comment: 'Whether the user has manually checked for updates, or this was an automatic check.';
    };
    comment: 'This is used to understand how often VS Code pings the update server for an update and there\'s none available.';
};
export declare abstract class AbstractUpdateService implements IUpdateService {
    private readonly lifecycleMainService;
    protected configurationService: IConfigurationService;
    private readonly environmentMainService;
    protected requestService: IRequestService;
    protected logService: ILogService;
    protected readonly productService: IProductService;
    readonly _serviceBrand: undefined;
    protected url: string | undefined;
    private _state;
    private readonly _onStateChange;
    readonly onStateChange: Event<State>;
    get state(): State;
    protected setState(state: State): void;
    constructor(lifecycleMainService: ILifecycleMainService, configurationService: IConfigurationService, environmentMainService: IEnvironmentMainService, requestService: IRequestService, logService: ILogService, productService: IProductService);
    /**
     * This must be called before any other call. This is a performance
     * optimization, to avoid using extra CPU cycles before first window open.
     * https://github.com/microsoft/vscode/issues/89784
     */
    initialize(): Promise<void>;
    protected getUpdateMode(): 'none' | 'manual' | 'start' | 'default';
    private getProductQuality;
    private scheduleCheckForUpdates;
    checkForUpdates(explicit: boolean): Promise<void>;
    downloadUpdate(): Promise<void>;
    protected doDownloadUpdate(state: AvailableForDownload): Promise<void>;
    applyUpdate(): Promise<void>;
    protected doApplyUpdate(): Promise<void>;
    quitAndInstall(): Promise<void>;
    isLatestVersion(): Promise<boolean | undefined>;
    _applySpecificUpdate(packagePath: string): Promise<void>;
    protected getUpdateType(): UpdateType;
    protected doQuitAndInstall(): void;
    protected abstract buildUpdateFeedUrl(quality: string): string | undefined;
    protected abstract doCheckForUpdates(context: any): void;
}
