import { ApiBase, ApiBaseInitializerParams } from './base';
import { EduUser, StreamType, DeleteStreamType, AgoraFetchParams, ClassroomStateParams, UserQueryParams, StreamQueryParams, EduStreamParams, EduStream, ChannelMessageParams, PeerMessageParams, EduUserData, EduStreamData, EduCourseState } from '../../interfaces';
import { EntryRequestParams, UserStreamResponseData, UserStreamList, EduJoinRoomParams, JoinRoomResponseData } from './interface';
export declare type CauseType = Record<string, any>;
export declare type BatchStreamAttribute = {
    streamUuid: string;
    userUuid: string;
};
export declare type EduStreamAttribute = {
    streamUuid: string;
    userUuid: string;
    videoSourceType: number;
    audioSourceType: number;
    hasVideo: number;
    hasAudio: number;
};
export declare type BatchAttributes = {
    properties: Record<any, any>;
    cause?: CauseType;
};
export interface ILocalUserInfo {
    userUuid: string;
    userToken: string;
    rtmToken: string;
    rtcToken: string;
}
declare type PeerChatMessageParams = {
    message: string;
    remoteUser: EduUser;
    roomUuid: string;
};
declare type RoomChatMessageParams = {
    message: string;
    roomUuid: string;
};
declare type CreateBizStreamParams = {
    roomUuid: string;
    userUuid: string;
    streamName: string;
    streamUuid: string;
    audioState: number;
    videoState: number;
    videoSourceType: number;
    audioSourceType: number;
};
declare type UpdateBizStreamParams = {
    roomUuid: string;
    userUuid: string;
    streamName: string;
    streamUuid: string;
    audioState: number;
    videoState: number;
    videoSourceType: number;
    audioSourceType: number;
    generateToken: boolean;
};
declare type DeleteBizStreamParams = {
    roomUuid: string;
    userUuid: string;
    streamUuid: string;
};
declare type RemoteMediaParams = {
    roomUuid: string;
    userUuid: string;
    streamUuid: string;
};
declare type UpsertStreamsParams = {
    roomUuid: string;
    streams: Array<StreamType>;
};
declare type DeleteStreamsParams = {
    roomUuid: string;
    streams: Array<DeleteStreamType>;
};
export declare class AgoraEduApi extends ApiBase {
    roomUuid: string;
    appId: string;
    authorization: string;
    nextId?: string;
    localInfo?: ILocalUserInfo;
    latestTime: number;
    private lastUserListTime;
    private lastStreamListTime;
    constructor(params: ApiBaseInitializerParams);
    updateLastTime(t: number): void;
    wait(time: number): Promise<void>;
    fetch(params: AgoraFetchParams): Promise<any>;
    getRoomConfig(roomId: string): Promise<any>;
    updateClassroomState(roomId: string, params: ClassroomStateParams): Promise<any>;
    getUserList(roomUuid: string, params: UserQueryParams): Promise<any>;
    getStreamList(roomUuid: string, params: StreamQueryParams): Promise<any>;
    createStream(roomId: string, params: EduStreamParams): Promise<any>;
    updatePublishStream(roomId: string, streamId: string, stream: EduStream): Promise<any>;
    removePublishStream(roomId: string, streamId: string, stream: EduStream): Promise<any>;
    sendChannelMessage(data: ChannelMessageParams): Promise<any>;
    sendPeerMessage(data: PeerMessageParams): Promise<any>;
    exitRoom(roomId: string): Promise<any>;
    entryRoom(params: EntryRequestParams): Promise<any>;
    fetchUsersStreams(nextId: string, count: number, updateTimeOffset?: number, includeOffline?: number): Promise<UserStreamResponseData>;
    fetchAllOfflineUsersStream(): Promise<UserStreamList>;
    fetchAllOnlineUserStream(): Promise<UserStreamList>;
    syncUserList(roomUuid: string): Promise<EduUserData[]>;
    syncStreamList(roomUuid: string): Promise<EduStreamData[]>;
    subRoomData(params: any): Promise<any>;
    joinRoom(params: EduJoinRoomParams): Promise<JoinRoomResponseData>;
    upsertBizStream(args: CreateBizStreamParams): Promise<any>;
    createBizStream(args: CreateBizStreamParams): Promise<any>;
    updateBizStream(args: UpdateBizStreamParams): Promise<any>;
    deleteBizStream(args: DeleteBizStreamParams): Promise<any>;
    sendRoomChatMessage(args: RoomChatMessageParams): Promise<any>;
    sendUserChatMessage(args: PeerChatMessageParams): Promise<any>;
    updateCourseState(params: {
        roomUuid: string;
        courseState: EduCourseState;
    }): Promise<any>;
    updateRoomProperties({ roomUuid, key, value, cause, }: {
        roomUuid: string;
        key: string;
        value: string;
        cause?: string;
    }): Promise<any>;
    updateRoomBatchProperties({ roomUuid, properties, cause, }: {
        roomUuid: string;
        properties: object;
        cause?: string;
    }): Promise<any>;
    allowStudentChatByRole(args: {
        enable: boolean;
        roomUuid: string;
        roles: string[];
    }): Promise<any>;
    stopShareScreen(roomUuid: string, streamUuid: string, userUuid: string): Promise<void>;
    allowRemoteStudentChat({ roomUuid, userUuid, muteChat }: any): Promise<any>;
    kickUser(args: {
        roomUuid: string;
        userUuid: string;
    }): Promise<any>;
    inviteUserPublishStream({ roomUuid, userUuid, streamUuid }: RemoteMediaParams): Promise<any>;
    remoteStartStudentCamera({ roomUuid, userUuid, streamUuid }: RemoteMediaParams): Promise<any>;
    remoteCloseStudentStream({ roomUuid, userUuid, streamUuid }: RemoteMediaParams): Promise<any>;
    remoteStopStudentCamera({ roomUuid, userUuid, streamUuid }: RemoteMediaParams): Promise<any>;
    remoteStartStudentMicrophone({ roomUuid, userUuid, streamUuid }: RemoteMediaParams): Promise<any>;
    remoteStopStudentMicrophone({ roomUuid, userUuid, streamUuid }: RemoteMediaParams): Promise<any>;
    batchUpsertStream({ roomUuid, streams }: UpsertStreamsParams): Promise<any>;
    batchDeleteStream({ roomUuid, streams }: DeleteStreamsParams): Promise<any>;
    login(userUuid: string): Promise<any>;
    syncSnapShot(roomUuid: string): Promise<any>;
    syncSequence(roomUuid: string, seqId: number, count?: number): Promise<any>;
    /**
     * 批量移除用户属性
     * @param roomUuid 房间id
     * @param userUuid 用户id
     */
    batchRemoveUserAttributes(roomUuid: string, userUuid: string, cause?: CauseType): Promise<any>;
    /**
     * 批量更新房间属性
     * @param roomUuid roomUuid: string
     * @param properties properties: Object
     */
    batchUpdateRoomAttributes(roomUuid: string, properties: BatchAttributes, cause?: CauseType): Promise<any>;
    /**
     * 批量移除房间属性
     * @param roomUuid roomUuid: string
     */
    batchRemoveRoomAttributes(roomUuid: string, cause?: CauseType): Promise<any>;
    /**
     * 批量移除流属性
     * @param streamUuid
     */
    batchRemoveStreamAttributes(streams: BatchStreamAttribute[], cause?: CauseType): Promise<any>;
    /**
     * 批量更新流属性
     * @param streamUuid
     * @param properties
     */
    batchUpdateStreamAttributes(streams: EduStreamAttribute[], cause?: CauseType): Promise<any>;
}
export {};
