import { AgoraWebStreamCoordinator } from '../core/media-service/web/coordinator';
import { EduClassroomAttrs, EduRoomAttrs, EduStream, EduStreamData, EduUserAttrs, EduUserData } from '../interfaces';
import { EduClassroomManager } from '../room/edu-classroom-manager';
import { CauseType } from './../core/services/edu-api';
import { EduClassroomManagerEventHandlers, SingleParameter } from './types';
import { OperatorUser } from './types';
export declare type SeqData = {
    seqId: number;
    data: any;
    cmd: number;
};
export declare type SeqRawData = Pick<SeqData, 'data' | 'cmd'>;
export declare class EduClassroomDataController {
    private _roomAttrs?;
    private _localUser?;
    private _streamList;
    private _userList;
    private _localUserUuid;
    streamCoordinator?: AgoraWebStreamCoordinator;
    setLocalUserUuid(v: string): void;
    get localUserUuid(): string;
    private _userToken?;
    get userToken(): string;
    setUserToken(t: string): void;
    get roomAttrs(): EduRoomAttrs;
    get roomUuid(): string;
    private roomManager;
    private _id;
    private _curSeqId;
    private _bufferMap;
    setCurrentSeqId(v: number): void;
    get curSeqId(): number;
    private _latestSeqId;
    get missingSeqId(): boolean;
    syncSequenceTimes: number;
    fire<EventName extends keyof EduClassroomManagerEventHandlers>(eventName: EventName, parameter: SingleParameter<EduClassroomManagerEventHandlers[EventName]>): void;
    syncingData: boolean;
    syncData(full: boolean, delay: number): Promise<void>;
    private syncTimer;
    asyncBatchUpdateData(delay: number): void;
    BatchUpdateData(): void;
    syncFullSequence(): Promise<void>;
    private syncSequence;
    syncFromCurrentSequenceId(): Promise<void>;
    setLatestSeqId(v: number): void;
    appendBuffer(buffer: SeqData): void;
    private _minSeqId;
    private retryTimer;
    constructor(context: EduClassroomManager);
    upsertLocalUser(user: EduUserAttrs, streamMap?: Record<string, any>): void;
    private _cachedLocalStreams;
    get streamMap(): Record<string, any>;
    get streamIds(): any[];
    get streamList(): EduStreamData[];
    get userList(): EduUserData[];
    get userIds(): string[];
    set localUser(v: EduUserData);
    get localUser(): EduUserData;
    get localStreamData(): EduStreamData;
    get localScreenShareStream(): EduStreamData;
    isLocalStreams(stream: EduStream): boolean;
    isLocalUser(userUuid: string): boolean;
    addStreams(rawStreams: EduStreamData[], operator: OperatorUser, cause: CauseType, seqId?: number): void;
    private isMainStream;
    private isScreenShare;
    removeTargetStream(targetStream: EduStreamData): void;
    removeLocalStream(streamUuid: string, operator: OperatorUser, cause: CauseType, seqId?: any): void;
    removeStreams(streams: EduStreamData[], operator: OperatorUser, cause: CauseType, seqId?: number): void;
    userIsOffline(user: EduUserData): boolean;
    streamIsOffline(stream: EduStreamData): boolean;
    addUserList(list: EduUserData[], operator: OperatorUser, cause: CauseType, seqId?: number): void;
    removeUserList(list: EduUserData[], operator: OperatorUser, cause: CauseType, seqId?: number): void;
    updateUserState(data: EduUserData): void;
    updateUserDevice(data: any, operator: any, cause: any): void;
    updateUserChatMute(data: any, operator: any, cause: any): void;
    updateUserList(onlineUsers: EduUserData[], offlineUsers: EduUserData[], operatorUser: OperatorUser, cause: CauseType, seqId?: number): void;
    updateStreamList(onlineStreams: EduStreamData[], offlineUsers: EduStreamData[], operatorUser: OperatorUser, cause: CauseType, seqId?: number): void;
    upsertTargetStream(targetStream: EduStreamData): void;
    upsertLocalStream(type: 'main' | 'screen', data: EduStreamData, operator: OperatorUser, cause: CauseType, seqId?: any): void;
    updateClassroomAttrs(params: any): void;
    updateClassroom(params: Partial<EduClassroomAttrs>): void;
    get classroom(): {
        roomInfo: any;
        roomStatus: any;
        roomProperties: any;
    };
    getClassroom(): {
        roomInfo: any;
        roomStatus: any;
        roomProperties: any;
    };
    reset(): void;
    private _roomInfo;
    get roomInfo(): any;
    private _roomProperties;
    get roomProperties(): any;
    private _users;
    get users(): EduUserData[];
    private _streams;
    get streams(): EduStreamData[];
    private _roomStatus;
    get roomState(): any;
    setRoomInfo(state: any): void;
    setRoomStatus(state: any, cause?: CauseType): void;
    setRoomProperties(roomProperties: any, operator?: OperatorUser, cause?: CauseType): void;
    updateBatchRoomProperties(roomProperties: any, cause: CauseType): void;
    setRoomBatchProperties(newProperties: any, operator?: OperatorUser, cause?: CauseType): void;
    private _localUserData?;
    get localUserData(): EduUserData;
    setLocalData(roomData: any): void;
    setLocalUser(user: EduUserData): void;
    setRawUsers(rawUsers: any[]): void;
}
