import { EduRoleTypeEnum } from 'agora-rte-sdk';
import { IReactionDisposer } from 'mobx';
import { EduScenarioAppStore } from '.';
import { IAgoraExtApp } from '../api/declare';
import { RoomApi } from '../services/room-api';
import { ChatConversation, ChatMessage, QuickTypeEnum } from '../types';
import { EduClassroomStateEnum, SimpleInterval } from './scene';
import { SmallClassStore } from './small-class';
export declare enum CoVideoActionType {
    studentHandsUp = 1,
    teacherAccept = 2,
    teacherRefuse = 3,
    studentCancel = 4,
    teacherReplayTimeout = 7,
    carousel = 10
}
export declare type CauseOperator = {
    cmd: number;
    data: {
        processUuid: string;
        addProgress: ProgressUserInfo[];
        addAccepted: ProgressUserInfo[];
        removeProgress: ProgressUserInfo[];
        removeAccepted: ProgressUserInfo[];
        actionType: CoVideoActionType;
        cmd: number;
        extAppCause: any;
    };
};
export declare type CauseData = {
    data: {
        processUuid: string;
        addProgress: ProgressUserInfo[];
        removeProgress: ProgressUserInfo[];
        actionType: CoVideoActionType;
    };
};
export declare type CauseResponder<T extends Partial<CauseData['data']>> = {
    readonly cmd: 501;
    readonly data: Readonly<T>;
};
export declare type HandsUpDataTypes = HandsUpMessageData | CancelHandsUpMessageData | CloseCoVideoMessageData | AcceptMessageData | RefuseMessageData;
export declare type HandsUpMessageData = Pick<CauseData['data'], 'actionType' | 'processUuid' | 'addProgress'>;
export declare type CancelHandsUpMessageData = Pick<CauseData['data'], 'processUuid' | 'removeProgress' | 'actionType'>;
export declare type CloseCoVideoMessageData = Pick<CauseData['data'], 'processUuid' | 'removeProgress' | 'actionType'>;
export declare type AcceptMessageData = Pick<CauseData['data'], 'actionType' | 'processUuid' | 'addProgress'>;
export declare type RefuseMessageData = Pick<CauseData['data'], 'actionType' | 'processUuid' | 'removeProgress'>;
export declare type RosterUserInfo = {
    name: string;
    uid: string;
    onlineState: boolean;
    onPodium: boolean;
    micDevice: boolean;
    cameraDevice: boolean;
    cameraEnabled: boolean;
    micEnabled: boolean;
    whiteboardGranted: boolean;
    canCoVideo: boolean;
    canGrantBoard: boolean;
    stars: number;
    disabled: boolean;
};
export declare type ProgressUserInfo = {
    userUuid: string;
    ts: number;
};
declare type ProcessType = {
    reward: number;
};
declare type RoomProperties = {
    board: {
        info: {
            boardAppId: string;
            boardId: string;
            boardToken: string;
        };
    };
    record: {
        state: number;
        roomType: number;
    };
    reward: RoomRewardType;
    state: number;
    screen: {
        state: number;
        streamUuid: string;
        userUuid: string;
        selected: number;
    };
    students: Record<string, ProcessType>;
    carousel: {
        state: 1 | 0;
        type: 1 | 2;
        range: 1 | 2;
        interval: number;
    };
};
declare type MinimizeType = {
    id: string;
    type: 'teacher' | 'student' | 'chat';
    content: string;
    isHidden: boolean;
    animation: string;
    zIndex: number;
    height: number;
    width?: number;
};
declare type RoomRewardType = {
    room: number;
    config: {
        roomLimit: number;
    };
};
declare type TrophyType = {
    minimizeTrigger: boolean;
    startPosition: {
        x: number;
        y: number;
    };
    endPosition: {
        x: number;
        y: number;
    };
};
declare type ClassroomScheduleType = {
    /**
     * 课程开始时刻 单位：ms
     */
    startTime: number;
    /**
     * 课程时长 单位：s
     */
    duration: number;
    /**
     * 课程结束后延迟关闭时长 单位：s
     */
    closeDelay: number;
};
export declare enum RoomPropertiesChangeCause {
    studentRewardStateChanged = 1101
}
export declare const networkQualities: {
    [key: string]: string;
};
export declare class RoomStore extends SimpleInterval {
    static resolutions: any[];
    history: any;
    operator: any;
    setHistory(history: any): void;
    resetRoomProperties(): void;
    roomProperties: RoomProperties;
    get flexProperties(): any;
    roomChatMessages: ChatMessage[];
    get chatMessageList(): any[];
    unreadMessageCount: number;
    joined: boolean;
    roomJoined: boolean;
    time: number;
    isStudentChatAllowed: boolean | undefined;
    windowWidth: number;
    windowHeight: number;
    trophyFlyout: TrophyType;
    /**
     * 当前时间（校验之后的）
     */
    get calibratedTime(): number;
    timeShift: number;
    classroomSchedule?: ClassroomScheduleType;
    get studentsReward(): Record<string, ProcessType> | {};
    get roomReward(): RoomRewardType | {
        room: number;
        config: {
            roomLimit: number;
        };
    };
    get liveClassStatus(): {
        classState: string;
        duration: number;
    };
    /**
     * 当前所属于状态的时间段 单位：ms
     * 课程开始之前表示：距离开始上课多久
     * 课程正在开始表示：已经上课多久
     * 课程已经结束表示：已经下课多久
     */
    get classTimeDuration(): number;
    get isClassroomDelayed(): boolean;
    showTranslate: boolean;
    timer: any;
    trophyNumber: number;
    get isTrophyLimit(): boolean;
    unwind: MinimizeType[];
    isBespread: boolean;
    isRed: boolean;
    additional: boolean;
    isJoiningRoom: boolean;
    roomApi: RoomApi;
    disposers: IReactionDisposer[];
    appStore: EduScenarioAppStore;
    get sceneStore(): import("./scene").SceneStore;
    smallClassStore: SmallClassStore;
    coVideoUsers: Record<string, any>;
    constructor(appStore: EduScenarioAppStore);
    reset(): void;
    addChatMessage(args: any): void;
    get roomManager(): import("agora-rte-sdk").EduClassroomManager;
    get userUuid(): string;
    get isTeacher(): boolean;
    sendMessage(message: any): Promise<{
        id: string;
        ts: number;
        text: any;
        account: string;
        sender: boolean;
        messageId: any;
        fromRoomName: string;
    }>;
    sendMessageToConversation(message: any, userUuid: string): Promise<{
        id: string;
        ts: number;
        text: any;
        account: string;
        sender: boolean;
        messageId: any;
        fromRoomName: string;
    }>;
    setMessageList(messageList: ChatMessage[]): void;
    getConversationList(data: {
        nextId: string;
        sort: number;
    }): Promise<any>;
    getHistoryChatMessage(data: {
        nextId: string;
        sort: number;
    }): Promise<any>;
    getConversationHistoryChatMessage(data: {
        nextId: string;
        sort: number;
        studentUuid: string;
    }): Promise<any>;
    roomChatConversations: ChatConversation[];
    get chatConversationList(): any[];
    addConversationChatMessage(args: any, conversation: any): void;
    getConversation(userUuid: string): ChatConversation | null;
    sendReward(userUuid: string, reward: number): Promise<any>;
    kickOutOnce(userUuid: string, roomUuid: string): Promise<void>;
    kickOutBan(userUuid: string, roomUuid: string): Promise<void>;
    tickClassroom(): void;
    chatIsBanned(isStudentChatAllowed: boolean): void;
    checkClassroomNotification(): Promise<void>;
    get roomInfo(): import("../api/declare").RoomInfo;
    resetUnreadMessageCount(): void;
    incrementUnreadMessageCount(): void;
    get delay(): string;
    isBigClassStudent(): boolean;
    updateRewardInfo(): void;
    get eduManager(): import("agora-rte-sdk").EduManager;
    getSessionConfig(): {
        sceneType: number;
        userRole: string;
    };
    getRoleEnumValue(userRole: string): EduRoleTypeEnum;
    get videoEncoderConfiguration(): import("./scene").SceneVideoConfiguration;
    pluginRoomProperties(extApp: IAgoraExtApp): any;
    joining: boolean;
    join(): Promise<void>;
    onClassStateChanged(state: EduClassroomStateEnum): Promise<void>;
    get isAssistant(): boolean;
    getRewardByUid(uid: string): number;
    leave(): Promise<void>;
    noticeQuitRoomWith(quickType: QuickTypeEnum): void;
    endRoom(): Promise<void>;
    get signalLevel(): number;
    get navigationState(): {
        cpuUsage: number;
        isStarted: boolean;
        title: string;
        signalQuality: any;
        networkLatency: number;
        networkQuality: string;
        packetLostRate: number;
        isNative: boolean;
    };
    handleCause(operator: unknown, { oldRoomProperties, newRoomProperties }: {
        oldRoomProperties: any;
        newRoomProperties: any;
    }): void;
    startJoining(): void;
    stopJoining(): void;
    updateFlexProperties(properties: any, cause: any): Promise<any>;
    startCarousel({ range, type, interval, }: {
        range: number;
        type: number;
        interval: number;
    }): Promise<void>;
    stopCarousel(): Promise<void>;
}
export {};
