/// <reference types="node" />
import { AxiosRequestConfig } from 'axios';
import { EventEmitter } from 'events';
import { Config, COS_INFO, MicroTempInfo, OSS_INFO, RoomActionsItem, RoomInitActionsItem, RoomUserType, RtcInfoType, SDKRoomInfoType, StorageType } from './common/Classes';
import SocketSDK from './socket';
import { checkAction, createRoomAction, getActionKey } from './socket/utils';
import { GetRoomAbnormalActionsQuery, GetRoomActionsQuery, GetRoomChatActionsQuery, UserRoleInfo } from './types';
export declare enum EE_EVENTS {
    'sdk-ready' = "sdk-ready",
    'sdk-error' = "sdk-error",
    '__TIME_ANIME_LOOP__' = "__TIME_ANIME_LOOP__"
}
export declare class SDK extends EventEmitter {
    userInfoCache: Map<number, RoomUserType>;
    initComplete: boolean;
    /**
     * 时间差 毫秒
     */
    dateDiff: number;
    /**
     * 时间
     */
    timer: {
        id: number;
    };
    conf: Config;
    roomData: SDKRoomInfoType;
    socket: SocketSDK;
    isSubRole: boolean;
    roleMain: number | undefined;
    roleSub: number | undefined;
    /**
     * 用户角色
     */
    role: number | undefined;
    /**
     * 用户id
     */
    id: number | undefined;
    /**
     * 用户id
     */
    roomid: string | undefined;
    constructor();
    destroy(): void;
    /**
     * 默认配置
     * 同时检测本地时间是否正常
     * @param config
     * @returns
     */
    config(config: Config): Promise<true>;
    /**
     * 检测是否config配置
     */
    checkIsConfig(): void;
    timeAnimeLoop: () => {
        id: number;
    };
    clearTimeAnimeLoop: () => void;
    /**
     * 获取用户信息
     * @param id
     * @returns
     */
    getUserInfo: (id: number) => RoomUserType | undefined;
    /**
     * 获取服务器时间
     * @returns
     */
    getServerTime: () => Promise<number>;
    /**
     * 获取当前时间
     * @returns 返回毫秒数字
     */
    getTime(): number;
    /**
     * 设置服务端时间
     * @param serverTime 服务器时间
     * @returns
     */
    setTime(serverTime: number): number;
    /**
     * 获取当前房间最新初始状态动作
     * @param userCustomRoomid 包含自定义房间
     * @param refresh 是否忽略缓存，拉取最新生成
     * @returns
     */
    getRoomInitActions(userCustomRoomid?: string[], refresh?: boolean): Promise<RoomInitActionsItem[]>;
    /**
     * 获取房间历史操作动作
     * @returns
     */
    getRoomActions(query: GetRoomActionsQuery): Promise<{
        page: number;
        pageSize: number;
        total: number;
        list: RoomActionsItem[];
    }>;
    /**
     * 获取房间聊天历史操作动作
     * @returns
     */
    getRoomChatActions(query: GetRoomChatActionsQuery): Promise<{
        page: number;
        pageSize: number;
        total: number;
        list: RoomActionsItem[];
    }>;
    /**
     * 获取房间异常
     */
    getRoomAbnormalActions(query: GetRoomAbnormalActionsQuery): Promise<{
        list: RoomActionsItem[];
        total: number;
        pageSize: number;
        page: number;
    }>;
    /**
     * 获取公告
     * @param status
     * @param userCustomRoomid
     * @returns
     */
    getRoomNoticeActions(query: GetRoomChatActionsQuery): Promise<{
        page: number;
        pageSize: number;
        total: number;
        list: RoomActionsItem[];
    }>;
    /**
     * 获取socket实例
     * @returns
     */
    getSocket(): Promise<SocketSDK>;
    /**
     * 获取房间数据
     * @returns
     */
    getRoomInfo(): Promise<SDKRoomInfoType>;
    /**
     * 获取子账户token
     * @param subAuthId
     * @returns
     */
    createSubAuthToken(subAuthId: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9): Promise<string>;
    /**
     * 创建新的webrtc房间
     * @param customRoomid 自定房间id
     * @param token 用新token获取
     * @returns
     */
    createWebRTCRoom(customRoomid: string, newToken?: string): Promise<RtcInfoType>;
    /**
     * 获取房间模板信息
     * @param id
     * @returns
     */
    getTempInfo(id: string): Promise<MicroTempInfo>;
    /**
     * 生成房间url
     * @param roomid 房间id
     * @param token 用户token
     * @returns
     */
    getRoomUrl(token: string): Promise<string>;
    /**
     * 检测token是否有效
     * @param token
     * @returns
     */
    checkToken(targeToken?: string): Promise<boolean>;
    getMicroApps(ids?: string[]): Promise<Array<MicroTempInfo>>;
    setMicroApps(app: MicroTempInfo | Array<MicroTempInfo>): MicroTempInfo[];
    getLocalMicroApps(): MicroTempInfo[];
    setLocalMicroApps(app: MicroTempInfo | Array<MicroTempInfo>): MicroTempInfo[];
    /**
     * 获取线上存储配置
     */
    getStorage(type: StorageType): Promise<{
        type: StorageType;
        data: COS_INFO | OSS_INFO;
    }>;
    /**
     * 获取代理接口数据 被代理接口必须是post接口
     * @param url 接口url
     * @param data
     * @returns
     */
    getProxyApiData(url: string, data?: AxiosRequestConfig['data']): Promise<any>;
    /**
     * 获取试卷列表
     */
    getTestPaperList(): Promise<{
        pageSize: number;
        total: number;
        page: number;
        list: RoomActionsItem[];
    }>;
    /**
     * 获取试卷详情
     * @param paperid
     */
    getTestPaperForID(paperid: string): Promise<RoomActionsItem>;
    /**
     * 获取所有已下发试卷
     * @param uid
     * @returns
     */
    getGiveTestPape(uid?: number): Promise<RoomActionsItem>;
    /**
     * 下发试卷
     * @param paperid
     */
    giveTestPaperForID(paperid: string, uid?: number | number[] | undefined): Promise<RoomActionsItem>;
    /**
     * 取消下发试卷
     * @param paperid
     */
    unGiveTestPaperForID(paperid: string, uid?: number | number[] | undefined): Promise<RoomActionsItem>;
    /**
     * 获取已下发给用户的试卷列表
     * @param page
     * @param pageSize
     * @returns
     */
    getUserTestPaperList(page?: number, pageSize?: number): Promise<RoomActionsItem>;
    /**
     * 获取已下发给用户的试卷详情 for paperid
     * @param page
     * @param pageSize
     * @returns
     */
    getUserTestPaperInfo(pageid: string): Promise<RoomActionsItem>;
    /**
     * 获取自己的试卷答案
     * @param paperid
     */
    getTestPaperAnswerForID(paperid: string): Promise<boolean>;
    /**
     * 提交自己的试卷答案
     * @param paperid
     */
    saveTestPaperAnswerForID(paperid: string, data: any): Promise<{
        paperid: string;
        data: any;
    }>;
    /**
     * 自动提交自己的试卷答案
     * @param paperid
     */
    autoSavePaperAnswerForID(paperid: string, data: any): Promise<{
        paperid: string;
        data: any;
    }>;
    /**
     * 开始录制
     * @param data
     * @param recordToken // 如用当前角色token 会使当token用户退出
     * @returns
     */
    startRecord(data: any, recordToken: string): Promise<{
        paperid: string;
        data: any;
    }>;
    /**
     * 停止录制
     * @param data
     * @returns
     */
    stopRecord(data?: any): Promise<{
        paperid: string;
        data: any;
    }>;
}
export declare const client: SDK;
export declare const utils: {
    createRoomAction: typeof createRoomAction;
    checkAction: typeof checkAction;
    getActionKey: typeof getActionKey;
    checkUserRole: (role: number) => UserRoleInfo | undefined;
    getRandomUUID(data?: string): string;
};
