import { IMMetaTypes } from "./Meta.i";
import { SIMTypes } from "./index.i";
/** IM 发送的参数 */
export declare namespace IMSendTypes {
    type MsgPacketId = string;
    /** 消息元信息 */
    interface MsgMetaData {
        command: IMMetaTypes.IMCommandEnum;
        packetId: IMSendTypes.MsgPacketId;
    }
    /** 登录信息 */
    interface LoginContent {
        command: IMMetaTypes.IMCommandEnum.CMD_LOGIN;
        appId: string;
        appversion: string;
        userSig: string;
        userId: string;
        terminal: '0' | '1';
        bundleId: string;
    }
    /** 查询离线消息的查询类型枚举 0单聊，1群聊，2指令 */
    enum QueryOfflineMsgTypeEnum {
        SingleChat = 0,
        GroupChat = 1,
        Instruction = 2
    }
    /** 普通消息发送格式 */
    type Send_DefaultMsg = MsgMetaData & {
        /** command */
        command: IMMetaTypes.IMCommandEnum.CMD_MSG;
        /** 安全类型，0-普通，1-密聊 */
        securityType: 0 | 1;
        /** 是否跨域 */
        cross: 0 | 1;
        /** 消息类型 */
        msgType: IMMetaTypes.SendNormalMsgTypeEnum;
        /** 消息内容 */
        message: string;
        /** 发送者 */
        sender: string;
        /** 接收者 */
        receiver: string;
        /** 会话类型 */
        chatType: SIMTypes.ChatTypeEnum;
        /** 发送时间 */
        time: number;
        /** 群类型，可选值[0:私密群，1:公开群，2:讨论组] */
        groupType?: 0 | 1 | 2;
        /** 是否有离线推送 */
        offlinePush?: boolean;
        /** 离线推送内容 */
        offlinePushInfo?: string;
        /** 消息扩展字段 */
        domain?: string;
    };
    /** 发送已读消息 */
    type Send_ReadMsg = MsgMetaData & {
        /** 消息类型 */
        msgType: IMMetaTypes.MsgTypeEnum.Msg_Read;
        command: IMMetaTypes.IMCommandEnum.CMD_MSG_READ;
        chatType: SIMTypes.ChatTypeEnum;
        securityType: 0 | 1;
        cross: 0 | 1;
        message: string;
        receiver: string;
        sender: string;
        time: number;
    };
    /** 发送撤回消息 */
    type Send_RevocationMsg = MsgMetaData & {
        msgType: IMMetaTypes.MsgTypeEnum.Msg_Withdraw;
        command: IMMetaTypes.IMCommandEnum.CMD_MSG_REVOCATION;
        chatType: SIMTypes.ChatTypeEnum;
        securityType: 0 | 1;
        cross: 0 | 1;
        message: string;
        receiver: string;
        sender: string;
        time: number;
    };
    /** 获取已读状态 */
    type Send_FetchMsgRead = MsgMetaData & {
        msgType: IMMetaTypes.MsgTypeEnum;
        command: IMMetaTypes.IMCommandEnum.CMD_MSG_GETREAD_NOTICE;
        chatType: SIMTypes.ChatTypeEnum;
        securityType: 0 | 1;
        cross: 0 | 1;
        message: string;
        receiver: string;
        sender: string;
        time: number;
    };
    /** 删除消息 */
    type Send_DeleteMsg = MsgMetaData & {
        msgType: IMMetaTypes.MsgTypeEnum;
        command: IMMetaTypes.IMCommandEnum.CMD_MSG_ADMIN_DELETE | IMMetaTypes.IMCommandEnum.CMD_MSG_DELETE;
        chatType: SIMTypes.ChatTypeEnum;
        securityType: 0 | 1;
        cross: 0 | 1;
        message: string;
        receiver: string;
        sender: string;
        time: number;
    };
    /** 查询离线消息的请求包体 */
    type Send_GetOffLineMsg = MsgMetaData & {
        command: IMMetaTypes.IMCommandEnum.CMD_OFFLINE_MSG_INQUIRE;
        lastMsgTime?: number;
        loginTime?: number;
        tId?: string;
        queryType: QueryOfflineMsgTypeEnum;
    };
    /** 发送音视频事件 */
    type Send_VVCEventMsg = MsgMetaData & {
        command: IMMetaTypes.IMCommandEnum.CMD_MSG_AV;
        sender: string;
        method: SIMTypes.VVCEventMethod;
        cross: 0 | 1;
        conId?: string;
        communicateType?: number;
        version?: string;
        overTimes?: number;
        receiver?: string;
        uniqueId?: string;
    };
    type Send_InitMsgCount = MsgMetaData & {
        command: IMMetaTypes.IMCommandEnum.CMD_CHAT_MSG_COUNT_SET;
        chatId: string;
        chatType: SIMTypes.ChatTypeEnum;
        securityType: 0 | 1;
        time?: number;
    };
    /** 登录消息体 */
    type Send_LoginMsg = MsgMetaData & LoginContent & {
        command: IMMetaTypes.IMCommandEnum.CMD_LOGIN;
    };
    type Send_LogoutMsg = MsgMetaData & {};
    /** 心跳消息体 */
    type Send_HeartBeatMsg = MsgMetaData & {
        command: IMMetaTypes.IMCommandEnum.CMD_HB;
    };
    /** 回执 */
    type Send_ReceiptMsg = MsgMetaData & {
        userId: string;
        command: IMMetaTypes.IMCommandEnum.CMD_MSG_C_RES;
    };
    /** 发送的消息体类型集合 */
    type Send_MsgTypeCorrespondMap = {
        [IMMetaTypes.IMCommandEnum.CMD_HB]: Send_HeartBeatMsg;
        [IMMetaTypes.IMCommandEnum.CMD_LOGIN]: Send_LoginMsg;
        [IMMetaTypes.IMCommandEnum.CMD_LOGOUT]: Send_LogoutMsg;
        [IMMetaTypes.IMCommandEnum.CMD_MSG_C_RES]: Send_ReceiptMsg;
        [IMMetaTypes.IMCommandEnum.CMD_MSG]: Send_DefaultMsg;
        [IMMetaTypes.IMCommandEnum.CMD_MSG_READ]: Send_ReadMsg;
        [IMMetaTypes.IMCommandEnum.CMD_MSG_REVOCATION]: Send_RevocationMsg;
        [IMMetaTypes.IMCommandEnum.CMD_MSG_GETREAD_NOTICE]: Send_FetchMsgRead;
        [IMMetaTypes.IMCommandEnum.CMD_MSG_ADMIN_DELETE]: Send_DeleteMsg;
        [IMMetaTypes.IMCommandEnum.CMD_MSG_DELETE]: Send_DeleteMsg;
        [IMMetaTypes.IMCommandEnum.CMD_OFFLINE_MSG_INQUIRE]: Send_GetOffLineMsg;
        [IMMetaTypes.IMCommandEnum.CMD_MSG_AV]: Send_VVCEventMsg;
        [IMMetaTypes.IMCommandEnum.CMD_CHAT_MSG_COUNT_SET]: Send_InitMsgCount;
    };
    /** _sendMsg 可以发送的消息 */
    type Send_MsgItem<T extends keyof Send_MsgTypeCorrespondMap> = Send_MsgTypeCorrespondMap[T];
}
/** IM 收到的消息体 */
export declare namespace IMReceiveTypes {
    type MsgMetaData = IMSendTypes.MsgMetaData;
    /** 服务端的回执内容 */
    interface ReceiptMsg_Basic<T = any> extends IMSendTypes.MsgMetaData {
        data?: T;
        result?: IMMetaTypes.IM_Status;
        message?: string;
    }
    /** todo 普通消息 消息体 */
    interface DefaultMsg extends MsgMetaData {
        "appId": string;
        "time": string;
        "cross": boolean;
        "message": string;
        "msgType": number;
        "sender": string;
        "receiver": string;
        "chatType": number;
        "securityType": number;
        "sign": boolean;
        "signUser": string;
        "delFlag": boolean;
        "priDelFlag": boolean;
        "admDelFlag": boolean;
        "readedFlag": boolean;
        "offlinePush": boolean;
        "varStatus": number;
        "replyCount": number;
        "readed": boolean;
        "pReaded": number;
        "pAll": number;
        "serialId": string;
        "tid": string;
    }
    interface MsgChangeBody extends DefaultMsg {
    }
    interface CdMsgBody extends DefaultMsg {
    }
    /** todo 通知消息 */
    interface Notice extends MsgMetaData {
        ext: any;
        type?: number;
    }
    interface QueryOfflineMsgResult extends MsgMetaData {
        data: DefaultMsg[];
    }
}
