/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import type { DataCubeSnapshot } from '../core/DataCubeSnapshot.js';
import type { DataCubeEngine } from '../core/DataCubeEngine.js';
import type { DataCubeSettingService } from './DataCubeSettingService.js';
import type { DataCubeLogService } from './DataCubeLogService.js';
interface DataCubeSnapshotSubscriber {
    getSnapshotSubscriberName(): string;
    getLatestSnapshot(): DataCubeSnapshot | undefined;
    receiveSnapshot(snapshot: DataCubeSnapshot): Promise<void>;
}
export declare abstract class DataCubeSnapshotController implements DataCubeSnapshotSubscriber {
    protected readonly _engine: DataCubeEngine;
    protected readonly _settingService: DataCubeSettingService;
    protected readonly _snapshotService: DataCubeSnapshotService;
    private _latestSnapshot;
    constructor(engine: DataCubeEngine, settingService: DataCubeSettingService, snapshotService: DataCubeSnapshotService);
    abstract getSnapshotSubscriberName(): string;
    getLatestSnapshot(): DataCubeSnapshot | undefined;
    receiveSnapshot(snapshot: DataCubeSnapshot): Promise<void>;
    abstract applySnapshot(snapshot: DataCubeSnapshot, previousSnapshot: DataCubeSnapshot | undefined): Promise<void>;
    publishSnapshot(snapshot: DataCubeSnapshot): void;
}
export declare class DataCubeSnapshotService {
    private readonly _logService;
    private readonly _settingService;
    private readonly _subscribers;
    private _snapshots;
    private _pointer;
    private _historySize;
    constructor(logService: DataCubeLogService, settingService: DataCubeSettingService);
    registerSubscriber(subscriber: DataCubeSnapshotSubscriber): void;
    private propagateSnapshot;
    getCurrentSnapshot(): DataCubeSnapshot;
    getHistory(options?: {
        full?: boolean;
    }): DataCubeSnapshot[];
    get canUndo(): boolean;
    get canRedo(): boolean;
    undo(): void;
    redo(): void;
    adjustHistorySize(size: number): void;
    broadcastSnapshot(snapshot: DataCubeSnapshot): void;
}
export {};
//# sourceMappingURL=DataCubeSnapshotService.d.ts.map