import { ReactElement } from 'react';
import { ScreenShareType, LocalUserRenderer, EduUser, EduStream, EduClassroomManager, MediaService, AgoraWebRtcWrapper, PrepareScreenShareParams } from 'agora-rte-sdk';
import { EduScenarioAppStore } from '.';
import { EduBoardService } from '../services/edu-board-service';
import { EduRecordService } from '../services/edu-record-service';
import { RoomApi } from '../services/room-api';
import { Mutex } from '../utilities/mutex';
import { ControlTool, EduMediaStream } from '../context/type';
import { DeviceStateEnum } from '../types';
export declare type SceneVideoConfiguration = {
    width: number;
    height: number;
    frameRate: number;
};
export declare enum EduClassroomStateEnum {
    beforeStart = 0,
    start = 1,
    end = 2,
    close = 3
}
export declare enum ClassStateEnum {
    started = 1
}
export declare enum UnmuteMediaEnum {
    audio = 0,
    video = 1
}
export declare enum CustomPeerApply {
    unmuteAction = 10
}
export declare const networkQualities: {
    [key: string]: string;
};
export type { EduMediaStream };
export declare class SimpleInterval {
    _intervalMap: Record<string, any>;
    addInterval(key: string, callback: CallableFunction, delay: number): void;
    delInterval(key: string): void;
}
export declare class SceneStore extends SimpleInterval {
    resolution: string;
    _microphoneTrack?: any;
    _cameraRenderer?: LocalUserRenderer;
    _screenVideoRenderer?: LocalUserRenderer;
    get videoEncoderConfiguration(): SceneVideoConfiguration;
    get totalVolume(): number;
    currentWindowId: string;
    customScreenSharePickerVisible: boolean;
    customScreenSharePickerType: ScreenShareType;
    customScreenSharePickerItems: any[];
    settingVisible: boolean;
    autoplay: boolean;
    recordState: boolean;
    startTime: number;
    sharing: boolean;
    get localStreamUuid(): any;
    _hasCamera?: boolean;
    _hasMicrophone?: boolean;
    readonly mutex: Mutex;
    cameraLock: boolean;
    microphoneLock: boolean;
    waitingShare: boolean;
    userList: EduUser[];
    get teacher(): EduUser | undefined;
    private _streamList;
    get screenShareStreamList(): EduStream[];
    get streamList(): EduStream[];
    updateStreamList(streamList: EduStream[]): void;
    unreadMessageCount: number;
    joined: boolean;
    classState: number;
    _delay: number;
    time: number;
    _cameraEduStream?: EduStream;
    _screenEduStream?: EduStream;
    roomApi: RoomApi;
    joiningRTC: boolean;
    recordId: string;
    recording: boolean;
    _canChatting: boolean;
    get canChatting(): boolean;
    _roomManager?: EduClassroomManager;
    appStore: EduScenarioAppStore;
    screenShareType: ScreenShareType;
    reset(): void;
    constructor(appStore: EduScenarioAppStore);
    get isHost(): boolean;
    get remoteUsersRenderer(): any[];
    get screenVideoRenderer(): LocalUserRenderer | undefined;
    get cameraRenderer(): LocalUserRenderer | undefined;
    get cameraId(): string;
    get microphoneId(): string;
    get boardService(): EduBoardService;
    get recordService(): EduRecordService;
    get canChat(): boolean;
    showSetting(): void;
    hideSetting(): void;
    resetCameraTrack(): void;
    resetMicrophoneTrack(): void;
    resetScreenTrack(): void;
    resetScreenStream(): void;
    sendUnmuteApply(source: 'video' | 'audio', userUuid: string): Promise<void>;
    showScreenShareWindowWithItems(type?: ScreenShareType): void;
    get roomUuid(): string;
    startNativeScreenShareBy(shareId: any, type?: ScreenShareType): Promise<void>;
    removeScreenShareWindow(): void;
    get mediaService(): MediaService;
    get web(): AgoraWebRtcWrapper;
    get isWeb(): boolean;
    get isElectron(): boolean;
    lockCamera(): void;
    unLockCamera(): void;
    openingTeacherCamera: boolean;
    closingTeacherCamera: boolean;
    openingStudentCamera: boolean;
    closingStudentCamera: boolean;
    loadingTeacherMicrophone: boolean;
    loadingStudentMicrophone: boolean;
    setOpeningCamera(value: boolean, userUuid: string): void;
    setClosingCamera(value: boolean, userUuid: string): void;
    setLoadingMicrophone(value: boolean, userUuid: string): void;
    get openingCamera(): boolean;
    get closingCamera(): boolean;
    get loadingMicrophone(): boolean;
    enableLocalAudio(): Promise<void>;
    enableLocalVideo(): Promise<void>;
    disableLocalVideo(): Promise<void>;
    sendMuteLocalCamera(): Promise<void>;
    sendUnmuteLocalCamera(): Promise<void>;
    disableLocalAudio(): Promise<void>;
    sendMuteLocalMicrophone(): Promise<void>;
    sendUnmuteLocalMicrophone(): Promise<void>;
    muteLocalCamera(sync?: boolean): Promise<void>;
    unmuteLocalCamera(sync?: boolean): Promise<void>;
    muteLocalMicrophone(sync?: boolean): Promise<void>;
    unmuteLocalMicrophone(sync?: boolean): Promise<void>;
    lockMicrophone(): void;
    unLockMicrophone(): void;
    stopWebSharing(): Promise<void>;
    startWebSharing(): Promise<void>;
    screenComponent: ReactElement | null;
    attachScreenComponent(component: ReactElement): void;
    stopRTCSharing(): Promise<void>;
    startOrStopSharing(type?: ScreenShareType): Promise<void>;
    prepareScreenShare(params?: PrepareScreenShareParams): Promise<void>;
    stopNativeSharing(): Promise<void>;
    resetWebPrepareScreen(): Promise<void>;
    get roomInfo(): import("..").RoomInfo;
    get delay(): string;
    get roomManager(): EduClassroomManager;
    get screenEduStream(): EduStream;
    get cameraEduStream(): EduStream;
    isBigClassStudent(): boolean;
    get eduManager(): import("agora-rte-sdk").EduManager;
    getStudentConfig(): {
        sceneType: number;
        userRole: string;
    };
    get teacherUuid(): string;
    get localUser(): any;
    get muteControl(): boolean;
    get userUuid(): string;
    get isRecording(): boolean;
    prepareRTC(): void;
    joinRTC(args: any): Promise<void>;
    leaveRtc(): Promise<void>;
    prepareCamera(): Promise<void>;
    prepareMicrophone(): Promise<void>;
    get defaultTeacherPlaceholder(): {
        holderState: string;
        text: string;
    };
    get defaultStudentPlaceholder(): {
        holderState: string;
        text: string;
    };
    get localCameraDeviceState(): DeviceStateEnum;
    get localMicrophoneDeviceState(): DeviceStateEnum;
    queryCameraDeviceState(userList: EduUser[], userUuid: string, streamUuid: string): any;
    queryMicDeviceState(userList: EduUser[], userUuid: string, streamUuid: string): any;
    queryRemoteCameraDeviceState(userList: EduUser[], userUuid: string, streamUuid: string): any;
    queryRemoteMicrophoneDeviceState(userList: EduUser[], userUuid: string, streamUuid: string): any;
    getLocalPlaceHolderProps(): {
        holderState: string;
        text: string;
    };
    getRemotePlaceHolderProps(userUuid: string, userRole: string): {
        holderState: string;
        text: string;
    };
    getFixAudioVolume(streamUuid: number): number;
    queryLocalCameraDevice(userUuid: string): any;
    queryLocalMicDevice(userUuid: string): any;
    get cameraDevice(): any;
    get micDevice(): any;
    queryCamIssue(userUuid: string): boolean;
    queryCamDisabled(userUuid: string): boolean;
    queryVideoFrameIsNotFrozen(uid: number): boolean;
    queryAudioIsNotFrozen(uid: number): boolean;
    queryUserIsOnline(userUuid: string): boolean;
    queryUserIsOnPodium(streamUuid: string): boolean;
    get teacherStreamInfo(): any;
    get teacherStream(): any;
    get sceneVideoConfig(): {
        hideOffPodium: boolean;
        hideOffAllPodium: boolean;
        isHost: boolean;
        hideBoardGranted: boolean;
    };
    get controlTools(): ControlTool[];
    get sceneType(): number;
    private getUserBy;
    private getStreamBy;
    private getRemoteVideoStatsBy;
    get screenShareStream(): EduMediaStream;
    isLocalStream(stream: EduStream): boolean;
    fixNativeVolume(volume: number): number;
    fixWebVolume(volume: number): number;
    get localVolume(): number;
    get studentStreams(): EduMediaStream[];
    startClass(): Promise<void>;
    stopClass(): Promise<void>;
    get mutedChat(): boolean;
    muteChat(): Promise<void>;
    unmuteChat(): Promise<void>;
    /**
     * @note only teacher or myself return true
     * @param userUuid string
     */
    hideControl(userUuid: string): boolean;
    closeStream(userUuid: string, isLocal: boolean): Promise<void>;
    muteAudio(userUuid: string, isLocal: boolean): Promise<void>;
    unmuteAudio(userUuid: string, isLocal: boolean): Promise<void>;
    muteVideo(userUuid: string, isLocal: boolean): Promise<void>;
    unmuteVideo(userUuid: string, isLocal: boolean): Promise<void>;
    muteUserChat(userUuid: string): Promise<void>;
    unmuteUserChat(userUuid: string): Promise<void>;
    startOrStopRecording(): Promise<void>;
    startRecording(): Promise<void>;
    stopRecording(): Promise<void>;
    revokeCoVideo(userUuid: string): Promise<void>;
    revokeAllCoVideo(): Promise<void>;
}
