/// <reference types="node" />
import { EventEmitter } from 'events';
import { AgoraEduApi, BatchStreamAttribute, CauseType, EduStreamAttribute } from '../core/services/edu-api';
import { DeleteStreamType, EduCourseState, EduRenderConfig, EduStream, EduStreamData, EduUser, StreamType } from '../interfaces';
import { EduClassroomDataController } from '../room/edu-classroom-data-controller';
import { EduClassroomManager } from '../room/edu-classroom-manager';
export interface EduModelViewOption {
    dom: HTMLElement;
    stream: EduStream;
    config?: EduRenderConfig;
}
export declare enum PeerInviteEnum {
    studentApply = 1,
    teacherReject = 2,
    studentCancel = 3,
    teacherAccept = 4,
    teacherStop = 5,
    studentStop = 6
}
export interface IEduUserService {
    publishStream(stream: EduStream): Promise<any>;
    unpublishStream(stream: EduStream): Promise<any>;
    sendRoomMessage(message: string): Promise<any>;
    sendUserMessage(message: string, remoteUser: EduUser): Promise<any>;
    sendRoomChatMessage(message: string, remoteUser: EduUser): Promise<any>;
    sendUserChatMessage(message: string, remoteUser: EduUser): Promise<any>;
}
export declare class EduUserService extends EventEmitter implements IEduUserService {
    roomManager: EduClassroomManager;
    constructor(roomManager: EduClassroomManager);
    get roomUuid(): string;
    get apiService(): AgoraEduApi;
    get localUser(): EduUser;
    get localUserUuid(): string;
    get localStream(): EduStreamData;
    get screenStream(): EduStreamData;
    get data(): EduClassroomDataController;
    publishStream(stream: EduStream): Promise<{
        streamUuid: any;
        rtcToken: any;
    }>;
    unpublishStream(stream: Pick<EduStream, 'streamUuid'>): Promise<void>;
    sendRoomMessage(message: string): Promise<void>;
    sendUserMessage(message: string, remoteUser: EduUser): Promise<void>;
    sendRoomChatMessage(message: string): Promise<any>;
    sendUserChatMessage(message: string, remoteUser: EduUser): Promise<any>;
    updateRoomProperties2(properties: any, cause?: CauseType): Promise<void>;
    updateRoomProperties(record: Record<string, any>): Promise<void>;
    updateRoomBatchProperties(record: Record<string, any>): Promise<void>;
    updateCourseState(courseState: EduCourseState): Promise<void>;
    kickUser(userUuid: string): Promise<void>;
    allowStudentChatByRole(enable: boolean, roles: string[]): Promise<void>;
    allowRemoteStudentChat(enable: boolean, user: EduUser): Promise<void>;
    startShareScreen(): Promise<void>;
    stopShareScreen(): Promise<void>;
    remoteStartStudentCamera(stream: EduStream): Promise<void>;
    remoteStopStudentCamera(stream: EduStream): Promise<void>;
    remoteStartStudentMicrophone(stream: EduStream): Promise<void>;
    remoteStopStudentMicrophone(stream: EduStream): Promise<void>;
    batchUpsertStream(streams: Array<StreamType>): Promise<void>;
    batchDeleteStream(streams: Array<DeleteStreamType>): Promise<void>;
    remoteCloseStudentStream(stream: EduStream): Promise<void>;
    updateMainStreamState(args: Record<string, boolean>): Promise<void>;
    muteStudentChatByRoles(roles: string[]): Promise<void>;
    unmuteStudentChatByRoles(roles: string[]): Promise<void>;
    sendCoVideoApply(teacher: EduUser): Promise<void>;
    acceptCoVideoApply(student: EduUser): Promise<void>;
    rejectCoVideoApply(student: EduUser): Promise<void>;
    inviteStreamBy(args: any): Promise<void>;
    studentCancelApply(teacher: EduUser): Promise<void>;
    studentCloseStream(me: EduUser): Promise<void>;
    teacherCloseStream(student: EduUser): Promise<void>;
    /**
     * 批量更新流属性
     * @param streams
     */
    batchUpdateStreamAttributes(streams: EduStreamAttribute[], cause?: CauseType): Promise<void>;
    /**
     * 批量移除流属性
     * @param streams
     */
    batchRemoveStreamAttributes(streams: BatchStreamAttribute[], cause?: CauseType): Promise<void>;
    /**
     * 批量移除用户属性
     * @param userUuid
     * @param properties
     */
    batchRemoveUserAttributes(userUuid: string, cause?: CauseType): Promise<void>;
    /**
     * 批量更新房间属性
     * @param properties
     */
    batchUpdateRoomAttributes(properties: any, cause?: CauseType): Promise<void>;
    /**
     * 移除房间属性
     */
    batchRemoveRoomAttributes(cause?: CauseType): Promise<void>;
}
