import { EquipmentInfo } from '../types';
import { RoomEvents } from '../socket/types';
import { UserRole, UserSubRole } from './Enums';
export interface TokenInfo {
    userInfo: {
        role: number;
        id: number;
        roomid: string;
        creatorId: string;
    };
    iat: Date | number;
    exp: Date | number;
}
export interface UserRoleInfo {
    role: number;
    mainRole: UserRole;
    subRole: UserSubRole;
    isSubRole: boolean;
    isMainRole: boolean;
}
export interface Config {
    /**
     * 房间token
     */
    token: string;
    /**
     * 调试模式
     */
    debug?: boolean;
    /**
     * 接口域名
     */
    host?: string;
    /**
     * 设备信息
     */
    equipment?: EquipmentInfo;
}
export interface MicroTempInfo {
    /**
     * 代码环境
     */
    codeType: 'dev' | 'master' | 'qa';
    _id: string;
    url: string;
    icon: string;
    name: string;
}
export interface RoomUserType {
    id: number;
    /**
     * uid 用户 role + id 拼接
     * webrtc 使用此id
     */
    uid?: number;
    name: string;
    avatar: string;
    role: UserRole;
    roomId?: string;
}
export interface RoomTempType {
    status: boolean;
    _id: string;
    name: string;
    url: string;
    config: string;
    created: Date;
    updated: Date;
    icon: string;
    path: string;
    rtcNumber: number;
    platform: {
        web: boolean;
        mobile: boolean;
    };
}
export interface RtcInfoType {
    type: 'agoral' | 'tencent';
    uid: number;
    channel: string;
    appid: string;
    token: string;
}
export interface SocketInfoType {
    url: string;
}
export interface RoomInfoType {
    roomInfo: {
        _id: string;
        name: string;
        created: Date;
        updated: Date;
        roomTempConfig: string;
        roomTempId: string;
        users: Array<RoomUserType>;
    };
    roomTemp: RoomTempType;
    socketInfo: SocketInfoType;
    userInfo: RoomUserType;
    /**
     * 服务器时间
     */
    onlineTime: number;
}
export interface SDKRoomInfoType extends RoomInfoType {
    _id?: string;
    /**
     * 各用户权限列表
     */
    users: {
        [key in UserRole]: RoomUserType[];
    } | object;
    /**
     * 房间开始时间
     */
    startTime: number;
    /**
     * 房间结束时间
     */
    endTime: number;
}
export interface RoomActionsItem extends RoomEvents {
    uuid: string;
    time: Date | number;
    created?: Date | string;
}
export interface RoomInitActionsItem extends RoomActionsItem {
    /**
     * 动作总次数
     */
    __COUNT__?: number;
}
export type StorageType = 'COS' | 'OSS';
export type COS_INFO = {
    expiredTime: number;
    expiration: string;
    credentials: {
        sessionToken: string;
        tmpSecretId: string;
        tmpSecretKey: string;
    };
    requestId: string;
    startTime: number;
    bucket: string;
    region: string;
};
export type OSS_INFO = {
    accessKeyId: string;
    accessKeySecret: string;
    bucket: string;
    region: string;
    stsToken: string;
    cname: boolean;
    endpoint: string;
};
export type PaperItem = {
    created: string;
    id: string;
    name: string;
    /**
     * 选项乱序
     * [1] 未乱
     * [2] 乱
     */
    optionOrder: 1 | 2;
    questionNumber: number;
    /**
     * 试题乱序
     * [1] 未乱
     * [2] 未乱
     */
    questionOrder: 1 | 2;
    score: number;
    /**
     * 发布状态
     * [1] 发
     * [2] 未发
     */
    status: 1 | 2;
    tags: string | [];
    /**
     * 状态
     * [1] 文档型试卷
     * [2] 在线型试卷
     * [3] url型试卷
     * [4] wps型试卷
     */
    type: 1 | 2 | 3 | 4;
    updated: string;
    sourceObj?: any;
    sourceUrl?: any;
};
