import { UserRole } from '../common/Enums';
/**
 * 房间监听事件名
 */
export type RoomsEventsNameType = '___RoomsEvents___';
/**
 * 用户系统角色
 */
export declare enum ToSystemEnum {
    /**
     * 当前房间所有用户
     */
    'ALL_USER' = -99,
    /**
     * 服务端系统用户
     */
    'SYSTEM_USER' = -100
}
export declare enum ActionsEnum {
    /**
     * 系统消息-房间消息推道
     */
    'system.ROOM_NOTIFICATION' = "system.ROOM_NOTIFICATION",
    /**
     * 系统消息-房间信息添加
     */
    'system.ROOM_INFO_ADD' = "system.ROOM_INFO_ADD",
    /**
     * 系统消息-房间信息更新
     */
    'system.ROOM_INFO_UPDATE' = "system.ROOM_INFO_UPDATE",
    /**
     * 系统消息-房间删除
     */
    'system.ROOM_INFO_DELETE' = "system.ROOM_INFO_DELETE",
    /**
     * 系统消息-房间用户添加
     */
    'system.ROOM_USER_ADD' = "system.ROOM_USER_ADD",
    /**
     * 系统消息-房间用户列新
     */
    'system.ROOM_USER_UPDATE' = "system.ROOM_USER_UPDATE",
    /**
     * 系统消息-房间用户删除
     */
    'system.ROOM_USER_DELETE' = "system.ROOM_USER_DELETE",
    /**
     * 系统消息-当前有其它设备正边接中
     */
    'system.USER_OTHER_CONNECTED' = "system.USER_OTHER_CONNECTED",
    /**
     * 系统消息-用户在其它地方登录 此连接将断开
     */
    'system.USER_SQUEEZE_CONNECTED' = "system.USER_SQUEEZE_CONNECTED",
    /**
     * 系统消息-系统时间
     */
    'system.SERVER_TIME' = "system.SERVER_TIME",
    /**
     * RTC-webrtc-创建
     */
    'rtc.channel.create' = "rtc.channel.create",
    /**
     * RTC加入频道
     */
    'rtc.channel.join' = "rtc.channel.join",
    /**
     * RTC快速切换直播频道
     */
    'rtc.channel.leave' = "rtc.channel.leave",
    /**
     * RTC离开频道
     */
    'rtc.leaveChannel' = "rtc.leaveChannel",
    /**
     * RTC启用音频模块
     */
    'rtc.audio.enable' = "rtc.audio.enable",
    /**
     * RTC关闭音频模块
     */
    'rtc.audio.disable' = "rtc.audio.disable",
    /**
     * RTC取消或恢复发布本地音频流
     */
    'rtc.audio.mute.local' = "rtc.audio.mute.local",
    /**
     * RTC取消或恢复订阅指定远端用户的音频流
     */
    'rtc.audio.mute.remote' = "rtc.audio.mute.remote",
    /**
     * RTC取消或恢复订阅所有远端用户的音频流
     */
    'rtc.audio.mute.remote.all' = "rtc.audio.mute.remote.all",
    /**
     * RTC启用视频模块
     */
    'rtc.video.enable' = "rtc.video.enable",
    /**
     * RTC关闭视频模块
     */
    'rtc.video.disable' = "rtc.video.disable",
    /**
     * RTC切换前置/后置摄像头
     */
    'rtc.vaido.camera.switch' = "rtc.vaido.camera.switch",
    /**
     * RTC取消或恢复发布本地视频流
     */
    'rtc.video.mute.local' = "rtc.video.mute.local",
    /**
     * RTC取消或恢复订阅指定远端用户的视频流
     */
    'rtc.video.mute.remote' = "rtc.video.mute.remote",
    /**
     * RTC取消或恢复订阅指定远端用户的视频流
     */
    'rtc.video.mute.remote.all' = "rtc.video.mute.remote.all",
    /**
     * RTC录制开始
     */
    'rtc.record.start' = "rtc.video.start",
    /**
     * RTC录制停止
     */
    'rtc.record.stop' = "rtc.video.stop",
    /**
     * 聊天-发信消息
     */
    'chat.send' = "chat.send",
    /**
     * 聊天-已读
     */
    'chat.read' = "chat.read",
    /**
     * 文件操作-发送文件
     */
    'file.send' = "file.send",
    /**
     * 文件操作-删除文件
     */
    'file.delete' = "file.delete",
    /**
     * 自定义操作-
     */
    'custom.action' = "custom.action",
    /**
     * 房间操作- 加入房间
     */
    'room.join' = "room.join",
    /**
     * 房间操作- 离开房间
     */
    'room.leave' = "room.leave",
    /**
     *  房间操作- 加入私有自定义房间
     */
    'room.customroom.join' = "room.customroom.join",
    /**
     * 房间操作- 离开私有自定义房间
     */
    'room.customroom.leave' = "room.customroom.leave",
    /**
     * 房间操作- 查看自定义房间
     */
    'room.customroom.allrooms' = "room.customroom.allrooms",
    /**
     * 房间操作- 公告发布
     */
    'room.notice.publish' = "room.notice.publish",
    /**
     * 房间操作- 公告撤销
     */
    'room.notice.unpublish' = "room.notice.unpublish",
    /**
     * 房间操作- 公告已读
     */
    'room.notice.read' = "room.notice.read",
    /**
     * 房间操作- 异常发布
     */
    'room.abnormal.publish' = "room.abnormal.publish",
    /**
     * 房间操作- 异常已读
     */
    'room.abnormal.read' = "room.abnormal.read",
    /**
     * 房间用户- 是否在线
     */
    'room.user.online' = "room.user.online",
    /**
     * 房间录制- 开始
     */
    'room.record.start' = "room.record.start",
    /**
     * 房间录制- 结束
     */
    'room.record.stop' = "room.record.stop",
    /**
     * 房间录制- 当前状态
     */
    'room.record.status' = "room.record.status",
    'client.connect' = "client.connect",
    'client.connect_error' = "client.connect_error",
    'client.disconnect' = "client.disconnect",
    'client.err' = "client.err"
}
export type RoomEvents = {
    uuid: string;
    action: keyof IRoomActions;
    data: IRoomActions[RoomEvents['action']];
    roomid: string;
    publisher: number;
    role?: UserRole;
    to?: number | string | Array<number | string> | ToSystemEnum;
    customroom?: string[];
};
export interface SystemActions {
    'system.ROOM_NOTIFICATION': {
        code: number;
        type: 'success' | 'info' | 'warning' | 'error';
        message: string;
        description?: string;
    };
    'system.ROOM_INFO_ADD': {};
    'system.ROOM_INFO_UPDATE': {};
    'system.ROOM_INFO_DELETE': {};
    'system.ROOM_USER_ADD': {};
    'system.ROOM_USER_UPDATE': {};
    'system.ROOM_USER_DELETE': {};
    'system.USER_OTHER_CONNECTED': {};
    'system.USER_SQUEEZE_CONNECTED': {};
    'system.SERVER_TIME': {};
    /**
     * RTC录制开始
     */
    'system.RTC_RECORD_START': {
        url: string;
        token: string;
        maxRecordingHour: number;
        resourceId: string;
        sid: string;
        recordUrl: string;
    };
    /**
     * RTC录制停止
     */
    'system.RTC_RECORD_STOP': {
        resourceId: string;
        sid: string;
        recordUrl: string;
    };
}
export interface ClientActions {
    'client.connect': {};
    'client.connect_error': {};
    'client.disconnect': {};
    'client.err': {
        message: string;
    };
}
/**
 * webRTC 视频
 */
export interface RtcActions {
    /**
     * 创建RTC频道
     */
    'rtc.channel.create': {
        channel: string;
    };
    /**
     * RTC加入频道
     */
    'rtc.channel.join': {
        channel: string;
    };
    /**
     * RTC快速切换直播频道
     */
    'rtc.channel.switch': {};
    /**
     * RTC离开频道
     */
    'rtc.channel.leave': {};
    /**
     * RTC启用音频模块
     */
    'rtc.audio.enable': {};
    /**
     * RTC关闭音频模块
     */
    'rtc.audio.disable': {};
    /**
     * RTC取消或恢复发布本地音频流
     */
    'rtc.audio.mute.local': {};
    /**
     * RTC取消或恢复订阅指定远端用户的音频流
     */
    'rtc.audio.mute.remote': {};
    /**
     * RTC取消或恢复订阅所有远端用户的音频流
     */
    'rtc.audio.mute.remote.all': {};
    /**
     * RTC启用视频模块
     */
    'rtc.video.enable': {};
    /**
     * RTC关闭视频模块
     */
    'rtc.video.disable': {};
    /**
     * RTC切换前置/后置摄像头
     */
    'rtc.vaido.camera.switch': {};
    /**
     * RTC取消或恢复发布本地视频流
     */
    'rtc.video.mute.local': {};
    /**
     * RTC取消或恢复订阅指定远端用户的视频流
     */
    'rtc.video.mute.remote': {};
    /**
     * RTC取消或恢复订阅所有远端用户的视频流
     */
    'rtc.video.mute.remote.all': {};
    /**
     * RTC录制开始
     */
    'rtc.record.start': {};
    /**
     * RTC录制停止
     */
    'rtc.record.stop': {};
}
/**
 * 文本消息
 */
export interface ChatActions {
    'chat.send': {
        id: string | number;
        text: string;
        createdAt: string | number;
        user: {
            id: string | number;
            name?: string;
            avatar?: string;
        };
        to?: {
            id: string | number;
            name?: string;
            avatar?: string;
        };
        image?: string;
        video?: string;
        audio?: string;
        system?: boolean;
        sent?: boolean;
        received?: boolean;
        pending?: boolean;
    };
    'chat.read': {
        id?: string;
        roomTag?: string;
        time: number | Date;
    };
}
/**
 * 文件操作
 */
export interface FileActions {
    'file.send': Array<{
        name: string;
        url: string;
    }>;
    'file.delete': Array<{
        id: string;
    }>;
}
/**
 * 自定义动作
 */
export interface CustomActions {
    'custom.action': any;
}
export interface RoomActions {
    /**
     * 加入房间
     */
    'room.join': {};
    /**
     * 离开房间
     */
    'room.leave': {};
    /**
     * 加入私有自定义房间
     */
    'room.customroom.join': {
        roomid: string;
    };
    /**
     * 离开私有自定义房间
     */
    'room.customroom.leave': {
        roomid: string;
    };
    /**
     * 所有加入的自定义房间
     */
    'room.customroom.allrooms': {
        rooms?: string[];
    };
    'room.notice.publish': {
        id: string;
        model: string;
        type: string;
        data: string;
    };
    'room.notice.unpublish': {
        id: string;
    };
    'room.notice.read': {
        time: string;
    };
    'room.abnormal.publish': {
        id: string;
        deviceid: string;
        platform: string;
        eventname: string;
        screenshots: string[];
        note?: string;
    };
    'room.abnormal.read': {
        time: string;
    };
    'room.user.online': {
        isOnline: boolean;
        /**
         * 设备信息唯一uuid
         */
        uuid?: string;
        /**
         * 客户端
         * desktop | browser | app
         */
        client?: string | 'unknown';
        /**
         * 系统
         * darwin | win32 | linux | android | ios
         */
        platform?: string | 'unknown';
        ip?: string | 'unknown';
        ua?: string | 'unknown';
    };
    'room.record.start': {};
    'room.record.stop': {};
    'room.record.status': {
        status: boolean;
    };
}
export interface IRoomActions extends SystemActions, ClientActions, RtcActions, ChatActions, FileActions, CustomActions, RoomActions {
}
export type RoomActionData = {
    action: keyof IRoomActions;
    data: IRoomActions[RoomActionData['action']];
};
