import { Room } from '@netless/forge-room';
import { Whiteboard, WhiteboardOption } from '@netless/forge-whiteboard';
import { AgoraRteConnectionState } from 'agora-rte-sdk';
import type { RTMClient } from 'agora-rtm';
import { AgoraObservable, AgoraScheduler } from '../../../imports';
import { FcrConnectionState } from '../../../type';
import { FcrCoreServiceApi } from '../../../service/api';
import { FcrBaseWhiteboardControl, FcrBaseWhiteboardObserver, FcrBoardMainWindow, FcrBoardRoomConfig } from '../type';
import { FcrBoardConfig } from '../whiteboard-control/type';
export declare class FcrBaseWhiteboardControlImpl<T extends FcrBaseWhiteboardObserver> implements FcrBaseWhiteboardControl<T> {
    protected rtmClient: RTMClient;
    protected config: FcrBoardConfig;
    protected api?: FcrCoreServiceApi | undefined;
    protected logger: import("agora-foundation/lib/logger/type").Logger;
    protected boardRoomConfigFetcherTask: AgoraScheduler.Task;
    protected observable: AgoraObservable<T>;
    protected boardView: FcrBoardMainWindow | null;
    protected boardRoom: Room | null;
    protected whiteboard: Whiteboard | null;
    protected connectState: FcrConnectionState;
    protected boardRoomConfig: FcrBoardRoomConfig | null;
    private _waitPromise;
    private _waitPromiseResolve;
    private _waitPromiseReject;
    private _openAbortController;
    private _openState;
    constructor(rtmClient: RTMClient, config: FcrBoardConfig, boardRoomConfigFetcher: () => Promise<FcrBoardRoomConfig>, api?: FcrCoreServiceApi | undefined);
    open(): Promise<FcrBoardMainWindow>;
    close(): Promise<number>;
    release(): Promise<number>;
    getConnectionState(): AgoraRteConnectionState;
    getMainWindow(): FcrBoardMainWindow | null;
    addObserver(observer: T): void;
    removeObserver(observer: T): void;
    protected internalOpen(isNeedLaunch: boolean): Promise<FcrBoardMainWindow>;
    protected updateConnectionState(state: FcrConnectionState): void;
    protected connect(isNeedLaunch: boolean): Promise<FcrBoardMainWindow>;
    protected getApplicationId(): string;
    protected getWhiteboardOption(): WhiteboardOption;
    protected getBackgroundColor(): string;
    protected addLogObserver(): void;
    private _checkForConnect;
    private _clearWaitPromise;
}
