import type { Displayer } from "white-web-sdk";
import { InvisiblePlugin } from "white-web-sdk";
import { EventEmitter2 } from "eventemitter2";
import type { SlideState } from "./projectorSlideManager";
import { ProjectorSlideManager } from "./projectorSlideManager";
import { ProjectorError } from "./error";
export declare type Logger = {
    readonly info: (...messages: any[]) => void;
    readonly warn: (...messages: any[]) => void;
    readonly error: (...messages: any[]) => void;
};
export declare type ProjectorCallback = {
    errorCallback: (e: ProjectorError) => void;
};
export declare enum ProjectorEvents {
    DisplayerDidMount = "DisplayerDidMount",
    EnableClick = "EnableClick",
    DisableClick = "DisableClick",
    UpdateParentContainerRect = "UpdateParentContainerRect",
    SetParentContainerRect = "SetParentContainerRect"
}
declare type ProjectorAdaptor = {
    logger?: Logger;
    callback?: ProjectorCallback;
};
declare type ProjectorSlideOption = {
    uuid: string;
    prefix: string;
};
declare type ProjectorStateStore = {
    [uuid: string]: SlideState | string;
} & {
    currentSlideUUID: string;
};
export declare class ProjectorPlugin extends InvisiblePlugin<ProjectorStateStore> {
    static readonly kind: string;
    private static _scenePath;
    static _emitter: EventEmitter2;
    static logger: Logger;
    static projectorCallbacks: ProjectorCallback;
    static currentSlideManager?: ProjectorSlideManager;
    onAttributesUpdate: (attributes: ProjectorStateStore) => Promise<void>;
    /**
     * received event from whiteboard
     */
    private whiteboardEventListener;
    private onApplianceChange;
    private roomStateChangeListener;
    private restoreSlideByState;
    private get isReplay();
    private get callbackName();
    private canClick;
    private unmountSlide;
    private putWhiteboardScenes;
    private jumpToScene;
    private getManagerInstance;
    /**
     * Throws an error when there is a problem
     * You can not create slide scene by room.putScenes(), Otherwise, the initialization will fail
     * Use createSlide() to create a slide and slide scenes
     *
     * Return undefined if initialization failed
     */
    static getInstance(displayer: Displayer, adaptor?: ProjectorAdaptor): Promise<ProjectorPlugin | undefined>;
    private init;
    /**
     * create a slide and slide scenes, then jump to frist slide page.
     * if the slide has already been created，it will clear whiteboard contents of the corresponding scnen
     * */
    createSlide(option: ProjectorSlideOption): Promise<void>;
    changeSlide(uuid: string, slideIndex?: number): Promise<void>;
    private refreshCurrentSlideManager;
    renderSlidePage(index: number): void;
    nextStep(): void;
    prevStep(): void;
    /**
     * clean slide attributes when state is messing
     */
    cleanPluginAttributes(): void;
    /**
     * delete slideState and slide scenePath
     * return false if delete motion failed.
     * can not delete slide if current slide is target.
     */
    deleteSlide: (uuid: string) => boolean;
    /**
     * List all tasks with first page preview
     * make sure storage bucket allow cross domain with GET & HEAD request
     */
    listSlidesWithPreview: () => Promise<{
        uuid: string;
        slidePreviewImage?: string;
    }[]>;
    /**
     * List preview images of specified task
     */
    listSlidePreviews: (uuid: string) => Promise<string[]>;
}
export {};
