import { AGEventEmitter, AgoraRteScene, Logger } from 'agora-rte-sdk';
import { EduClassroomConfig } from '../../../../configs';
import { EduApiService } from '../../../../services/api';
import { AgoraWidgetMessageListener, AgoraWidgetStateListener } from './type';
export declare class AgoraWidgetController {
    private _scene;
    private _api;
    private _stateListeners;
    logger: Logger;
    private _eventBus;
    private _zIndexController;
    private _widgetIds;
    private _cache;
    constructor(_scene: AgoraRteScene, _api: EduApiService, _stateListeners: AgoraWidgetStateListener[]);
    /**
     * widget消息总线
     */
    get eventBus(): AGEventEmitter;
    /**
     * 当前存在的 Widget 实例ID列表
     */
    get widgetIds(): string[];
    /**
     * 层级控制器
     */
    get zIndexController(): AgoraWidgetZIndexController;
    /**
     * 房间配置
     */
    get classroomConfig(): EduClassroomConfig;
    /**
     * 添加一个组件状态监听器
     * @param listener
     */
    /** @en
     *
     * @param listener
     */
    addWidgetStateListener(listener: AgoraWidgetStateListener): void;
    /**
     * 移除一个组件状态监听器
     * @param listener
     */
    removeWidgetStateListener(listener: AgoraWidgetStateListener): void;
    /**
     * 向指定 Widget 发送消息
     * @param toWidgetId
     * @param messageType
     * @param args
     */
    sendMessage(toWidgetId: string, messageType: string, message?: unknown): void;
    /**
     * 增加一个消息监听器
     * @param listener
     */
    addWidgetMessageListener(listener: AgoraWidgetMessageListener): void;
    /**
     * 移除一个消息监听器
     * @param listener
     */
    removeWidgetMessageListener(listener: AgoraWidgetMessageListener): void;
    /**
     * 广播消息
     */
    broadcast(messageType: string, message?: unknown): void;
    /**
     * 监听广播消息
     */
    addBroadcastListener(listener: Omit<AgoraWidgetMessageListener, 'widgetId'>): void;
    /**
     * 移除一个广播消息监听器
     */
    removeBroadcastListener(listener: Omit<AgoraWidgetMessageListener, 'widgetId'>): void;
    /**
     * 设置 widget 为活跃
     * @param widgetId
     * @param extra
     * @returns
     */
    setWidegtActive(widgetId: string, props?: any, ownerUserUuid?: string): Promise<{
        data: any;
    }>;
    /**
     * 设置 widget 为不活跃
     * @param widgetId
     * @returns
     */
    setWidgetInactive(widgetId: string, props?: any): Promise<{
        data: any;
    }>;
    /**
     * 删除房间 Widget
     * @param widgetId
     * @param keys
     * @returns
     */
    deleteWidget(widgetId: string): Promise<{
        data: any;
    }>;
    /**
     * 删除用户属性字段
     * @param widgetId
     * @param keys
     * @returns
     */
    removeWidgetUserProperties(widgetId: string, keys?: string[]): Promise<{
        data: any;
    }>;
    /**
     * 删除扩展信息字段
     * @param widgetId
     * @param keys
     * @returns
     */
    removeWidgetExtraProperties(widgetId: string, keys?: string[]): Promise<{
        data: any;
    }>;
    /**
     * 更新 widget 属性
     * @param widgetId
     * @param props
     * @returns
     */
    updateWidgetProperties(widgetId: string, props: any): Promise<{
        data: any;
    }>;
    /**
     * 更新 widget 用户属性
     * @param widgetId
     * @param props
     */
    updateWidgetUserProperties(widgetId: string, props: any): void;
    /**
     * 销毁
     */
    destroy(): void;
    /**
     * 获取 Widget 属性
     * @param widgetId
     * @returns
     */
    getWidgetProperties(widgetId: string): any;
    /**
     * 获取 Widget 用户属性
     * @param widgetId
     * @returns
     */
    getWidgetUserProperties(widgetId: string): any;
    /**
     * 获取 Widget 轨迹同步信息
     * @param widgetId
     * @returns
     */
    getWidgetTrack(widgetId: string): any;
    /**
     * 获取 Widget 状态
     * @param widgetId
     */
    getWidgetState(widgetId: string): any;
    private _addEventListener;
    private _removeEventListener;
    private _handleWidgetStateChange;
    private _handleWidgetPropertiesChange;
    private _handleWidgetUserPropertiesChange;
    private _handleWidgetTrackChange;
    private _extractProps;
    private _compareToPrevious;
    private _clearCache;
    private _handleRoomPropertiesChange;
    private _handleUserPropertiesChange;
    private _updateBatchUserProperties;
    private _handleUserAdded;
}
declare class AgoraWidgetZIndexController {
    private _latestZIndex;
    incrementZIndex(): number;
    get latestZIndex(): number;
    setZIndex(zIndex: number): void;
}
export {};
