import { DisconnectReason as DisconnectReason$1, LogLevel, LogTarget, DeviceType, DisconnectEventData as DisconnectEventData$1, UserLeaveEventData, BuildInfo, PusherOptions, RemoteTrack, EnvWxInfo } from '@seastart/srtc-wx-sdk';

/** 轨道描述 */
declare enum TrackDesc {
    /** 麦克风流 */
    MIC = "mic",
    /** 摄像头大流 */
    CAMERAL_BIG = "camera_big",
    /** 摄像头小流 */
    CAMERAL_SMALL = "camera_small",
    /** 桌面共享流 */
    SCREEN = "screen"
}
/**
 * 举手类型
 */
declare enum HandupType {
    /**
     * 申请开麦克风
     */
    Mic = 1,
    /**
     * 申请开摄像头
     */
    Camera = 2,
    /**
     * 申请聊天
     */
    Chat = 3
}
/**
 * 用户举手动作步骤
 */
declare enum UserHandupStep {
    /**
     * 请求举手
     */
    Request = 1,
    /**
     * 取消举手
     */
    Cancel = 2,
    /**
     * 确认打开设备
     */
    ConfirmOpen = 3,
    /**
     * 拒绝打开设备
     */
    RejectOpen = 4
}
/**
 * 摄像头状态
 */
declare enum CameraState {
    /**
     * 开
     */
    On = 1,
    /**
     * 关
     */
    Off = 2
}
/**
 * 麦克风状态
 */
declare enum MicState {
    /**
     * 开
     */
    On = 1,
    /**
     * 关
     */
    Off = 2
}
/**
 * 房间共享类型
 */
declare enum ShareType {
    /**
     * 屏幕共享
     */
    Screen = 1,
    /**
     * 电子白板s
     */
    WhiteBoard = 2
}
/**
 * 共享状态
 */
type ShareState = 0 | ShareType;
/**
 * 角色类型
 */
declare enum Role {
    /**
     * 普通成员
     */
    Member = 0,
    /**
     * 主持人
     */
    Host = 1,
    /**
     * 联席主持人
     */
    CoHost = 2
}
/**
 * 聊天消息类型
 */
declare enum ChatMsgType {
    /**
     * 文本
     */
    Text = 1,
    /**
     * 文件
     */
    File = 2,
    /**
     * 图片
     */
    Pic = 3,
    /**
     * 语音
     */
    Sound = 4
}
/**
 * 用户离开房间的原因
 */
type DisconnectReason = DisconnectReason$1;
/**
 * 会议类型
 */
declare enum MeetingType {
    /** 即时会议 */
    Instant = 1,
    /** 预约会议 */
    Appointment = 2
}
/**
 * 入会静音状态
 */
declare enum EntryMutePolicy {
    /** 开启入会静音(所有人入会默认静音) */
    Silent = 1,
    /** 不限制，跟随客户端初始音频状态 */
    UnRestrict = 2,
    /** 超6人静音(超过6人后入会静音) */
    SilentAfter6 = 3
}
/**
 * 登录sdk的token信息
 */
interface MeetingToken {
    /** 应用ID */
    app_id: string;
    /** 用户ID */
    user_id: string;
    /** 过期时间 */
    exp_at: number;
    /** 客户端密钥 */
    client_key: string;
    /** sdk接口前缀 */
    client_api: string;
}
/**
 * 用户类型
 */
declare enum UserType {
    /** 普通用户 */
    Normal = 1,
    /** SIP用户 */
    SIP = 2,
    /** H323用户 */
    H323 = 3
}
/**
 * sdk构造参数
 */
interface SdkInitParams {
    /** 日志等级 */
    logLevel?: LogLevel;
    /** 日志目标 */
    logTarget?: LogTarget;
}
/**
 * 创建/修改会议参数
 */
interface MeetingCreateReq {
    /** 房间号 */
    room_no?: string;
    /** 会议标题 */
    title: string;
    /** 会议说明 */
    content?: string;
    /** 入会密码 */
    password?: string;
    /** 会议类型 1:即时会议 2：预约会议 */
    meeting_type?: MeetingType;
    /** 开始时间 */
    begin_time?: number;
    /** 结束时间 */
    end_time?: number;
    /** 入会静音选项 */
    entry_mute_policy?: EntryMutePolicy;
    /** 水印是否关闭 */
    watermark_disabled?: boolean;
    /** 截屏是否禁止 */
    screenshot_disabled?: boolean;
    /** 房间禁聊天 */
    chat_disabled?: boolean;
    /** 扩展字段 */
    extend_info?: string;
}
/**
 * 加入会议参数
 */
interface MeetingEnterReq {
    /** 房间号 */
    room_no: string;
    /** 入会密码 */
    password?: string;
    /** 会中昵称 */
    nickname: string;
    /** 会中头像 */
    avatar?: string;
    /** 扩展字段 */
    extend_info?: string;
}
/**
 * 房间信息
 */
interface RoomInfo {
    /** 会议ID */
    id: string;
    /** 房间号 */
    room_no: string;
    /** 会议标题 */
    title: string;
    /** 会议说明 */
    content: string;
    /** 会议类型，1即时会议, 2预约会议 */
    meeting_type: MeetingType;
    /** 开始时间，unix时间戳(秒) */
    begin_time: number;
    /** 结束时间，unix时间戳(秒) */
    end_time: number;
    /** 入会静音选项，1 入会默认静音，2 跟随客户端初始音频状态，3 超过6人后入会静音 */
    entry_mute_policy: EntryMutePolicy;
    /** 关水印设置，false不限, true关水印 */
    watermark_disabled: boolean;
    /** 禁截屏设置，false不限, true禁截屏 */
    screenshot_disabled: boolean;
    /** 禁聊设置，false不限, true禁聊 */
    chat_disabled: boolean;
    /** 静音设置，false不限, true静音 */
    mic_disabled: boolean;
    /** 禁画设置，false不限, true禁画 */
    camera_disabled: boolean;
    /** 禁自我解除静音，false不限, true禁解除 */
    self_unmute_mic_disabled: boolean;
    /** 禁自我解除禁画，false不限, true禁解除 */
    self_unmute_camera_disabled: boolean;
    /** 房间锁定状态，false不限, true锁定 */
    locked: boolean;
    /** 共享状态，0无, 1屏幕, 2白板 */
    share_state: ShareState;
    /** 共享者ID */
    share_uid: string;
    /** 创建者ID */
    creator: string;
    /** 主持人ID */
    host_uid: string;
    /** 联席主持ID列表 */
    co_hosts: string[];
    /** 自定义扩展，json串表示的键值对 */
    extend_info: string;
}
/**
 * 用户信息
 */
interface UserInfo {
    /** 用户id */
    uid: string;
    /** 会中昵称 */
    name: string;
    /** 设备类型 */
    device_type: DeviceType;
    /** 设备ID */
    device_id: string;
    /** 客户端sdk版本号 */
    version: string;
    /** 进入时间 */
    join_at: number;
    /** 会中角色，0普通, 1主持, 2联席主持 */
    role: Role;
    /** 会中头像 */
    avatar: string;
    /** 麦克风状态，1开, 2关 */
    mic_state: MicState;
    /** 摄像头状态，1开, 2关 */
    camera_state: CameraState;
    /** 共享状态，0无, 1屏幕, 2白板 */
    share_state: ShareState;
    /** 是否被踢出，false正常, true被踢 */
    is_kickout: boolean;
    /** 禁聊设置，false不限, true禁聊 */
    chat_disabled: boolean;
    /** 自定义扩展，json串表示的键值对 */
    extend_info: string;
}
/**
 * 当前会议
 */
interface Room {
    /**
     * 当前会议信息
     */
    info: RoomInfo;
    /**
     * 当前会议中用户
     */
    users: Record<string, UserInfo>;
}

/** 房间事件通知 */
declare class RoomEvent {
    /** 事件类型 */
    type: CommonRoomEventType;
    /** 事件携带的数据 */
    data?: any;
    constructor(type: CommonRoomEventType, data?: any);
}
/** 房间事件类型 */
declare class CommonRoomEventType {
    /** 开始断线自动重连，无data */
    static readonly RECONNECTING = "reconnecting";
    /** 重连成功，断线重连成功后会触发，无data */
    static readonly RECONNECTED = "reconnected";
    /** 自己被强制离开频道，对应data为 DisconnectEventData */
    static readonly DISCONNECTED = "disconnected";
    /** 其他用户加入频道，对应data为 UserInfo */
    static readonly USER_ENTER = "user_enter";
    /** 其他用户离开频道，对应data为 UserExitEventData */
    static readonly USER_EXIT = "user_exit";
    /** 用户摄像头状态变化(自己/他人主动改变或被主持人改变)，对应data为 UserCameraStateChangeEventData */
    static readonly USER_CAMREA_STATE_CHANGED = "user_camera_state_changed";
    /** 用户麦克风状态变化(自己/他人主动改变或被主持人改变)，对应data为 UserMicStateChangeEventData */
    static readonly USER_MIC_STATE_CHANGED = "user_mic_state_changed";
    /** 用户昵称变化(自己/他人主动改变或被主持人改变)，对应data为 UserNameChangeEventData */
    static readonly USER_NAME_CHANGED = "user_name_changed";
    /** 用户角色变化，对应data为 UserRoleChangeEventData */
    static readonly USER_ROLE_CHANGED = "user_role_changed";
    /** 用户聊天禁用状态变化，对应data为 UserChatDisabledChangeEventData */
    static readonly USER_CHAT_DISABLED_CHANGED = "user_chat_disabled_changed";
    /** 用户举手相关事件(管理员才会收到)，对应data为 UserHandupEventData */
    static readonly USER_HANDUP = "user_handup";
    /** 房间摄像头禁用状态改变，对应data为 RoomCameraStateChangeEventData */
    static readonly ROOM_CAMREA_STATE_CHANGED = "room_camera_state_changed";
    /** 房间麦克风禁用状态改变，对应data为 RoomMicStateChangeEventData */
    static readonly ROOM_MIC_STATE_CHANGED = "room_mic_state_changed";
    /** 房间聊天禁用状态改变，对应data为 RoomChatDisabledChangeEventData */
    static readonly ROOM_CHAT_DISABLED_CHANGED = "room_chat_disabled_changed";
    /** 房间截屏禁用状态改变，对应data为 RoomScreenshotDisabledChangeEventData */
    static readonly ROOM_SCREENSHOT_DISABLED_CHANGED = "room_screenshot_disabled_changed";
    /** 房间水印禁用状态改变，对应data为 RoomWatermarkDisabledChangeEventData */
    static readonly ROOM_WATERMARK_DISABLED_CHANGED = "room_watermark_disabled_changed";
    /** 房间锁定状态改变，对应data为 RoomLockedChangeEventData */
    static readonly ROOM_LOCKED_CHANGED = "room_locked_changed";
    /** 房间共享开始，对应data为 RoomShareStartEventData */
    static readonly ROOM_SHARE_START = "room_share_start";
    /** 房间共享结束，对应data为 RoomShareStopEventData */
    static readonly ROOM_SHARE_STOP = "room_share_stop";
    /** 房间聊天消息，对应data为 RoomChatMsgEventData */
    static readonly ROOM_CHAT_MSG = "room_chat_msg";
    /** 房间自定义消息，对应data为 RoomCustomMsgEventData */
    static readonly ROOM_CUSTOM_MSG = "room_custom_msg";
    /** 主持人处理您的举手申请，对应data为 AdminConfirmHandupEventData */
    static readonly ADMIN_CONFIRM_HANDUP = "admin_confirm_handup";
    /** 主持人请求您开麦，对应data为 AdminRequestOpenMicEventData */
    static readonly ADMIN_REQUEST_OPEN_MIC = "admin_request_open_mic";
    /** 主持人请求您开摄像头，对应data为 AdminRequestOpenCameraEventData */
    static readonly ADMIN_REQUEST_OPEN_CAMERA = "admin_request_open_camera";
}
/**
 * 强制离开事件data
 */
type DisconnectEventData = DisconnectEventData$1;
/**
 * 用户离开事件data
 */
type UserExitEventData = UserLeaveEventData;
/**
 * 用户摄像头状态变化事件
 */
interface UserCameraStateChangeEventData {
    /** 用户 */
    uid: string;
    /** 摄像头状态 */
    camera_state: CameraState;
    /** 是否管理员操作 */
    by_admin: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 用户麦克风状态变化事件
 */
interface UserMicStateChangeEventData {
    /** 用户 */
    uid: string;
    /** 麦克风状态 */
    mic_state: MicState;
    /** 是否管理员操作 */
    by_admin: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 用户昵称变化事件
 */
interface UserNameChangeEventData {
    /** 用户 */
    uid: string;
    /** 昵称 */
    nickname: string;
    /** 是否管理员操作 */
    by_admin: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 用户角色变化事件
 */
interface UserRoleChangeEventData {
    /** 用户 */
    uid: string;
    /** 角色 */
    role: Role;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 用户聊天禁用状态事件
 */
interface UserChatDisabledChangeEventData {
    /** 用户 */
    uid: string;
    /** 聊天禁用状态 */
    chat_disabled: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 管理员收到用户举手相关事件
 */
interface UserHandupEventData {
    /** 用户 */
    uid: string;
    /** 举手类型 */
    type: HandupType;
    /** 举手步骤 */
    step: UserHandupStep;
}
/**
 * 房间摄像头禁用状态改变事件
 */
interface RoomCameraStateChangeEventData {
    /** 房间视频禁用状态 */
    camera_disabled: boolean;
    /** 是否禁止自我解除视频状态 */
    self_unmute_camera_disabled: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 房间麦克风禁用状态改变事件
 */
interface RoomMicStateChangeEventData {
    /** 房间麦克风禁用状态 */
    mic_disabled: boolean;
    /** 是否禁止自我解除麦克风状态 */
    self_unmute_mic_disabled: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 房间聊天禁用状态改变事件
 */
interface RoomChatDisabledChangeEventData {
    /** 房间聊天禁用状态 */
    chat_disabled: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 房间截屏禁用状态改变事件
 */
interface RoomScreenshotDisabledChangeEventData {
    /** 房间截屏禁用状态 */
    screenshot_disabled: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 房间水印禁用状态改变事件
 */
interface RoomWatermarkDisabledChangeEventData {
    /** 房间水印禁用状态 */
    watermark_disabled: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 房间锁定状态改变事件
 */
interface RoomLockedChangeEventData {
    /** 房间锁定状态 */
    locked: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 房间共享开始事件
 */
interface RoomShareStartEventData {
    /** 共享用户 */
    uid: string;
    /** 共享类型 */
    share_type: ShareType;
}
/**
 * 房间停止共享事件
 */
interface RoomShareStopEventData {
    /** 原共享用户 */
    uid: string;
    /** 原共享类型 */
    share_type: ShareType;
    /** 是否管理员操作 */
    by_admin: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 房间聊天消息事件
 */
interface RoomChatMsgEventData {
    /** 消息类型 */
    msg_type: ChatMsgType;
    /** 消息内容 */
    msg: string;
    /** 发送用户 */
    uid?: string;
    /** 是否私聊 */
    private: boolean;
}
/**
 * 房间自定义消息事件
 */
interface RoomCustomMsgEventData {
    /** 消息内容 */
    msg: string;
    /** 发送用户 */
    uid?: string;
    /** 是否私聊 */
    private: boolean;
}
/**
 * 主持人处理您的举手申请事件
 */
interface AdminConfirmHandupEventData {
    /** 举手类型 */
    type: HandupType;
    /** 是否同意 */
    approve: boolean;
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 主持人请求您开摄像头事件
 */
interface AdminRequestOpenCameraEventData {
    /** 操作者用户id */
    op_uid?: string;
}
/**
 * 主持人请求您开麦事件
 */
interface AdminRequestOpenMicEventData {
    /** 操作者用户id */
    op_uid?: string;
}

/**
 * sdk实例基类
 */
declare abstract class BaseSMeeting {
    /**
     * 房间事件通知回调
     */
    onNotifyRoomEvent?: ((event: RoomEvent) => void);
    constructor(initParams: SdkInitParams);
    /**
     * sdk编译信息
     * @returns
     */
    buildInfo(): BuildInfo;
    /**
     * 登录sdk
     * @param token
     */
    login(token: string): Promise<void>;
    /**
     * 退出sdk
     * @param token
     */
    logout(): Promise<void>;
    /**
     * 创建会议
     * @returns 房间号
     */
    createRoom(req: MeetingCreateReq): Promise<string>;
    /**
     * 会前修改会议
     */
    updateRoom(id: string, req: Partial<MeetingCreateReq>): Promise<void>;
    /**
     * 进入会议
     */
    enterRoom(req: MeetingEnterReq): Promise<void>;
    /**
     * 退出会议
     */
    exitRoom(): Promise<void>;
    /**
     * 获取会议信息
     * @returns
     */
    getRoomInfo(): RoomInfo | null;
    /**
     * 获取某用户信息
     * @returns
     */
    getUserInfo(uid: string): UserInfo;
    /**
     * 获取会议内用户信息列表
     * @returns
     */
    getUsersInfo(map: true): Record<string, UserInfo>;
    getUsersInfo(map: false): UserInfo[];
    /**
     * 关闭摄像头
     * @param byAdmin 是否管理员强制关闭
     */
    abstract closeCamera(byAdmin: boolean): Promise<any>;
    /**
     * 关闭麦克风
     * @param byAdmin 是否管理员强制关闭
     */
    abstract closeMic(byAdmin: boolean): Promise<any>;
    /**
     * 停止播放远端用户视频
     * @param uid 远端用户id
     * @param trackDesc 视频轨道描述
     */
    abstract stopPlayRemoteVideo(uid: string, trackDesc: TrackDesc): Promise<void>;
    /**
     * 更新会中昵称
     * @param name
     */
    updateName(name: string): Promise<void>;
    /**
     * 结束会议（解散）
     */
    adminDestroyRoom(): Promise<void>;
}

declare class SMeeting extends BaseSMeeting {
    /**
     * 打开摄像头
     */
    requestOpenCamera(): Promise<PusherOptions>;
    /**
     * 关闭摄像头
     * @param byAdmin 是否管理员强制关闭
     */
    closeCamera(byAdmin?: boolean): Promise<PusherOptions>;
    /**
     * 切换前后置摄像头
     */
    switchCamera(): Promise<PusherOptions>;
    /**
     * 打开麦克风
     */
    requestOpenMic(): Promise<PusherOptions>;
    /**
     * 关闭麦克风
     * @param byAdmin 是否管理员强制关闭
     */
    closeMic(byAdmin?: boolean): Promise<PusherOptions>;
    /**
     * 开始播放远端用户视频
     * @param container 播放容器
     * @param uid 远程用户id
     * @param trackDesc 视频轨道描述
     * @returns
     */
    startPlayRemoteVideo(uid: string, trackDesc: TrackDesc): Promise<RemoteTrack>;
    /**
     * 停止播放远端用户视频
     * @param uid 远端用户id
     * @param trackDesc 视频轨道描述
     */
    stopPlayRemoteVideo(uid: string, trackDesc: TrackDesc): Promise<void>;
    /**
     * 获取小程序运行环境信息
     * @returns
     */
    getEnvInfo(): EnvWxInfo;
    /**
     * livepusher配置
     */
    getPusherOptions(): PusherOptions;
    /**
     * 上报live-pusher的volumenotify
     * 你需要在live-pusher组件bindaudiovolumenotify
     * @param detail 小程序的event.detail
     * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html
     */
    updatePusherVolume(detail: any): void;
    /**
     * 上报live-pusher的error
     * 你需要在live-pusher组件binderror
     * @param detail 小程序的event.detail
     * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html
     */
    updatePusherError(detail: any): void;
    /**
     * 上报live-pusher的netstatus
     * 你需要在live-pusher组件bindnetstatus
     * @param detail 小程序的event.detail
     * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html
     */
    updatePusherNetStatus(detail: any): void;
    /**
     * 上报live-pusher的statechange事件
     * 你需要在live-pusher组件bindstatechange
     * @param detail 小程序的event.detail
     * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html
     */
    updatePusherStateChange(detail: any): void;
    /**
     * 上报live-player的netstatus
     * 你需要在live-player组件bindnetstatus
     * @param uid 流轨道的所有者
     * @param trackId 流轨道id
     * @param detail 小程序的event.detail
     * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html
     */
    updatePlayerNetStatus(uid: string, trackId: string, detail: any): void;
    /**
     * 上报live-player的statechange事件
     * 你需要在live-player组件bindstatechange
     * @param uid 流的所有者
     * @param trackId 流轨道id
     * @param detail 小程序的event.detail
     * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html
     */
    updatePlayerStateChange(uid: string, trackId: string, detail: any): void;
}

export { type AdminConfirmHandupEventData, type AdminRequestOpenCameraEventData, type AdminRequestOpenMicEventData, CameraState, ChatMsgType, CommonRoomEventType, type DisconnectEventData, type DisconnectReason, EntryMutePolicy, HandupType, type MeetingCreateReq, type MeetingEnterReq, type MeetingToken, MeetingType, MicState, Role, type Room, type RoomCameraStateChangeEventData, type RoomChatDisabledChangeEventData, type RoomChatMsgEventData, type RoomCustomMsgEventData, RoomEvent, type RoomInfo, type RoomLockedChangeEventData, type RoomMicStateChangeEventData, type RoomScreenshotDisabledChangeEventData, type RoomShareStartEventData, type RoomShareStopEventData, type RoomWatermarkDisabledChangeEventData, SMeeting, type SdkInitParams, type ShareState, ShareType, TrackDesc, type UserCameraStateChangeEventData, type UserChatDisabledChangeEventData, type UserExitEventData, type UserHandupEventData, UserHandupStep, type UserInfo, type UserMicStateChangeEventData, type UserNameChangeEventData, type UserRoleChangeEventData, UserType };
