import { FcrInterpreterRoomControlImpl } from '../room-control/interpreter-control/room';
import { FcrJoinBeforeHostWaitingRoomControlImpl } from '../room-control/join-before-host-waitingroom-control';
import { FcrMainRoomControlImpl } from '../room-control/mainroom-control';
import { FcrBaseRoomControl, FcrJoinBeforeHostWaitingRoomControl, FcrMainRoomControl, FcrRoomJoinOptions, FcrRoomType, FcrWaitingRoomControl } from '../room-control/type';
import { FcrWaitingRoomControlImpl } from '../room-control/waitingroom-control';
import { FcrError } from '../utilities/error';
export type FcrRoomControlType = FcrMainRoomControl | FcrWaitingRoomControl | FcrJoinBeforeHostWaitingRoomControl;
export interface FcrRoomRouterObserver {
    /**
     * 房间路由离开
     */
    onRoomRouteSwitched?: (nextRoomRoute: FcrRoomRoute) => void;
    /**
     * 房间路由加入
     */
    onRoomJoined?: (roomControl: FcrRoomControlType) => void;
    /**
     * 房间路由切换错误
     */
    onErrorOccurred?: (error: FcrError) => void;
}
export interface FcrRoomRoute {
    roomId: string;
    roomType: FcrRoomType;
    isJoined: boolean;
}
export interface FcrRoomRouter {
    /**
     * 当前的roomControl
     */
    /**
     * 初始化默认房间路由
     */
    /**
     * 加入会议
     */
    joinRoom(options: FcrRoomJoinOptions): Promise<FcrBaseRoomControl>;
    /**
     * 离开会议
     */
    leaveRoom(): Promise<number>;
    addObserver(observer: FcrRoomRouterObserver): void;
    removeObserver(observer: FcrRoomRouterObserver): void;
}
export type FcrRoomControlImplType = typeof FcrWaitingRoomControlImpl | typeof FcrJoinBeforeHostWaitingRoomControlImpl | typeof FcrMainRoomControlImpl | typeof FcrInterpreterRoomControlImpl;
export declare const ROOM_ROUTER_CONSTANTS: {
    MAX_JOIN_ATTEMPTS: 10;
};
