import { ZIM, ZIMGroupMuteInfo, ZIMPushConfig, ZIMUserInfo } from './index';
export interface ZIMConversationBaseInfo {
    conversationID: string;
    conversationType: ZIM.ConversationType;
}
export interface ZIMConversation {
    type: ZIM.ConversationType;
    conversationID: string;
    conversationName: string;
    conversationAlias: string;
    conversationAvatarUrl: string;
    unreadMessageCount: number;
    orderKey: number;
    notificationStatus: ZIM.ConversationNotificationStatus;
    isPinned: boolean;
    isDisabled: boolean;
    mutedExpiredTime: number;
    draft: string;
    marks: number[];
    mentionedInfoList: ZIMMessageMentionedInfo[];
    lastMessage?: ZIMMessage;
}
export interface ZIMGroupConversation extends ZIMConversation {
    isDisabled: boolean;
    mutedExpiredTime: number;
}
export interface ZIMMessageReceivedInfo {
    isOfflineMessage: boolean;
}
export interface ZIMMessageMentionedInfo {
    type: ZIM.MessageMentionedType;
    fromUserID: string;
    messageID: string;
    messageSeq: number;
}
export interface ZIMMessageRepliedInfo {
    state: ZIM.MessageRepliedInfoState;
    messageSeq: number;
    messageID: string;
    senderUserID: string;
    sentTime: number;
    messageInfo: ZIMMessageLiteInfo;
    messageEditSeq: number;
    rootMessageSeq: number;
    rootMessageID: string;
}
export interface ZIMMessageRootRepliedInfo {
    messageSeq: number;
    state: ZIM.MessageRepliedInfoState;
    senderUserID: string;
    sentTime: number;
    repliedCount: number;
    message?: ZIMMessage;
}
export interface ZIMMessageRootRepliedCountInfo {
    conversationID: string;
    conversationType: ZIM.ConversationType;
    count: number;
    messageID: string;
}
export interface ZIMConversationChangeInfo {
    event: ZIM.ConversationEvent;
    conversation: ZIMConversation;
}
export interface ZIMMessage {
    type: ZIM.MessageType;
    extendedData?: string;
    localExtendedData?: string;
    isMentionAll?: boolean;
    mentionedUserIDs?: string[];
    readonly localMessageID?: string;
    readonly messageID?: string;
    readonly messageSeq?: number;
    readonly senderUserID?: string;
    readonly timestamp?: number;
    readonly conversationID?: string;
    readonly conversationType?: ZIM.ConversationType;
    readonly direction?: ZIM.MessageDirection;
    readonly sentStatus?: ZIM.MessageSentStatus;
    readonly orderKey?: number;
    readonly isUserInserted?: boolean;
    readonly isBroadcastMessage?: boolean;
    readonly isServerMessage?: boolean;
    readonly isGroupTargetedMessage?: boolean;
    readonly receiptStatus?: ZIM.MessageReceiptStatus;
    readonly reactions?: ZIMMessageReaction[];
    readonly editorUserID?: string;
    readonly editedTime?: number;
    readonly rootRepliedCount?: number;
    readonly repliedInfo?: ZIMMessageRepliedInfo;
}
export interface ZIMMediaMessage extends ZIMMessage {
    /**
     * Required when sending local file message.
     */
    fileLocalPath?: string;
    /**
     * Required when sending remote file message.
     */
    fileDownloadUrl?: string;
    fileName?: string;
    readonly fileSize?: number;
    readonly fileUID?: string;
}
export interface ZIMCommandMessage extends ZIMMessage {
    type: ZIM.MessageType.Command;
    message: Uint8Array;
}
export interface ZIMBarrageMessage extends ZIMMessage {
    type: ZIM.MessageType.Barrage;
    message: string;
}
export interface ZIMTextMessage extends ZIMMessage {
    type: ZIM.MessageType.Text;
    message: string;
}
export interface ZIMCustomMessage extends ZIMMessage {
    type: ZIM.MessageType.Custom;
    message: string;
    subType: number;
    searchedContent?: string;
}
export interface ZIMCombineMessage extends ZIMMessage {
    type: ZIM.MessageType.Combine;
    title: string;
    summary: string;
    messageList: ZIMMessage[];
    readonly combineID?: string;
}
export interface ZIMMultipleMessage extends ZIMMessage {
    type: ZIM.MessageType.Multiple;
    messageInfoList: Array<ZIMTextMessageLiteInfo | ZIMCustomMessageLiteInfo | ZIMImageMessageLiteInfo | ZIMFileMessageLiteInfo | ZIMAudioMessageLiteInfo | ZIMVideoMessageLiteInfo>;
}
export interface ZIMImageMessage extends ZIMMediaMessage {
    type: ZIM.MessageType.Image;
    thumbnailDownloadUrl?: string;
    largeImageDownloadUrl?: string;
    originalImageWidth?: number;
    originalImageHeight?: number;
    thumbnailWidth?: number;
    thumbnailHeight?: number;
    largeImageWidth?: number;
    largeImageHeight?: number;
}
export interface ZIMFileMessage extends ZIMMediaMessage {
    type: ZIM.MessageType.File;
}
export interface ZIMAudioMessage extends ZIMMediaMessage {
    type: ZIM.MessageType.Audio;
    audioDuration: number;
}
export interface ZIMVideoMessage extends ZIMMediaMessage {
    type: ZIM.MessageType.Video;
    videoDuration: number;
    videoFirstFrameDownloadUrl?: string;
    videoFirstFrameWidth?: number;
    videoFirstFrameHeight?: number;
}
export interface ZIMRevokeMessage extends ZIMMessage {
    readonly type: ZIM.MessageType.Revoke;
    readonly revokeType: ZIM.RevokeType;
    readonly revokeStatus: ZIM.MessageRevokeStatus;
    readonly revokeTimestamp: number;
    readonly operatedUserID: string;
    readonly revokeExtendedData: string;
    readonly originalMessageType: ZIM.MessageType;
    readonly originalTextMessageContent: string;
}
export interface ZIMTipsMessage extends ZIMMessage {
    readonly type: ZIM.MessageType.Tips;
    readonly event: ZIM.TipsMessageEvent;
    readonly operatedUser: ZIMUserInfo;
    readonly targetUserList: ZIMUserInfo[];
    readonly changeInfo?: ZIMTipsMessageGroupChangeInfo | ZIMTipsMessageGroupMemberChangeInfo;
}
export interface ZIMTipsMessageChangeInfo {
    type: ZIM.TipsMessageChangeInfoType;
}
export interface ZIMTipsMessageGroupChangeInfo extends ZIMTipsMessageChangeInfo {
    groupDataFlag: number;
    groupName: string;
    groupAvatarUrl: string;
    groupNotice: string;
    groupMutedInfo: ZIMGroupMuteInfo;
}
export interface ZIMTipsMessageGroupMemberChangeInfo extends ZIMTipsMessageChangeInfo {
    memberRole: number;
    muteExpiredTime: number;
}
export interface ZIMMessageLiteInfo {
    type: ZIM.MessageType;
}
export interface ZIMMediaMessageLiteInfo extends ZIMMessageLiteInfo {
    fileLocalPath?: string;
    fileDownloadUrl?: string;
    fileName?: string;
    fileSize?: number;
}
export interface ZIMRevokeMessageLiteInfo extends ZIMMessageLiteInfo {
    type: ZIM.MessageType.Revoke;
}
export interface ZIMTextMessageLiteInfo extends ZIMMessageLiteInfo {
    type: ZIM.MessageType.Text;
    message: string;
}
export interface ZIMCustomMessageLiteInfo extends ZIMMessageLiteInfo {
    type: ZIM.MessageType.Custom;
    message: string;
    subType: number;
    searchedContent?: string;
}
export interface ZIMCombineMessageLiteInfo extends ZIMMessageLiteInfo {
    type: ZIM.MessageType.Combine;
    title: string;
    summary: string;
}
export interface ZIMMultipleMessageLiteInfo extends ZIMMessageLiteInfo {
    type: ZIM.MessageType.Multiple;
    messageInfoList: Array<ZIMTextMessageLiteInfo | ZIMCustomMessageLiteInfo | ZIMImageMessageLiteInfo | ZIMFileMessageLiteInfo | ZIMAudioMessageLiteInfo | ZIMVideoMessageLiteInfo>;
}
export interface ZIMImageMessageLiteInfo extends ZIMMediaMessageLiteInfo {
    type: ZIM.MessageType.Image;
    thumbnailDownloadUrl?: string;
    largeImageDownloadUrl?: string;
    originalImageWidth?: number;
    originalImageHeight?: number;
    thumbnailWidth?: number;
    thumbnailHeight?: number;
    largeImageWidth?: number;
    largeImageHeight?: number;
}
export interface ZIMFileMessageLiteInfo extends ZIMMediaMessageLiteInfo {
    type: ZIM.MessageType.File;
}
export interface ZIMAudioMessageLiteInfo extends ZIMMediaMessageLiteInfo {
    type: ZIM.MessageType.Audio;
    audioDuration: number;
}
export interface ZIMVideoMessageLiteInfo extends ZIMMediaMessageLiteInfo {
    type: ZIM.MessageType.Video;
    videoDuration: number;
    videoFirstFrameDownloadUrl?: string;
    videoFirstFrameWidth?: number;
    videoFirstFrameHeight?: number;
}
export interface ZIMMessageReaction {
    conversationID: string;
    conversationType: ZIM.ConversationType;
    messageID: string;
    reactionType: string;
    isSelfIncluded: boolean;
    totalCount: number;
    userList: ZIMMessageReactionUserInfo[];
}
export interface ZIMMessageReactionUserInfo {
    userID: string;
}
export interface ZIMMessageReceiptInfo {
    conversationID: string;
    conversationType: ZIM.ConversationType;
    messageID: string;
    status: ZIM.MessageReceiptStatus;
    readMemberCount: number;
    unreadMemberCount: number;
    isSelfOperated: boolean;
}
export interface ZIMMessageSentStatusChangeInfo {
    status: ZIM.MessageSentStatus;
    reason: string;
    message: ZIMMessage;
}
export interface ZIMConversationSearchInfo {
    conversationID: string;
    conversationType: ZIM.ConversationType;
    totalMessageCount: number;
    messageList: ZIMMessage[];
}
export interface ZIMMessageSendNotification {
    onMessageAttached: (message: ZIMMessage) => void;
    onMediaUploadingProgress?: (message: ZIMMediaMessage, currentFileSize: number, totalFileSize: number) => void;
    onMultipleMediaUploadingProgress?: (message: ZIMMultipleMessage, currentFileSize: number, totalFileSize: number, messageInfoIndex: number, currentIndexFileSize: number, totalIndexFileSize: number) => void;
}
export interface ZIMConversationQueryConfig {
    count: number;
    nextConversation?: ZIMConversation;
}
export interface ZIMConversationTotalUnreadMessageCountQueryConfig {
    marks: number[];
    conversationTypes: ZIM.ConversationType[];
}
export interface ZIMConversationFilterOption {
    marks: number[];
    conversationTypes: ZIM.ConversationType[];
    isOnlyUnreadConversation: boolean;
}
export interface ZIMConversationDeleteConfig {
    isAlsoDeleteServerConversation: boolean;
}
export interface ZIMMessageDeleteConfig {
    isAlsoDeleteServerMessage: boolean;
}
export interface ZIMMessageQueryConfig {
    count: number;
    reverse: boolean;
    nextMessage?: ZIMMessage;
}
export interface ZIMGroupMessageReceiptMemberQueryConfig {
    count: number;
    nextFlag: number;
}
export interface ZIMConversationSearchConfig {
    keywords: string[];
    senderUserIDs: string[];
    messageTypes: ZIM.MessageType[];
    subMessageTypes: number[];
    startTime: number;
    endTime: number;
    totalConversationCount: number;
    conversationMessageCount: number;
    nextFlag?: number;
}
export interface ZIMMessageSearchConfig {
    keywords: string[];
    senderUserIDs: string[];
    messageTypes: ZIM.MessageType[];
    subMessageTypes: number[];
    startTime: number;
    endTime: number;
    order: ZIM.MessageOrder;
    count: number;
    nextMessage?: ZIMMessage;
}
export interface ZIMMessageReactionUserQueryConfig {
    reactionType: string;
    count: number;
    nextFlag: number;
}
export interface ZIMMessageSendConfig {
    priority: ZIM.MessagePriority;
    hasReceipt?: boolean;
    isRetrySend?: boolean;
    isNotifyMentionedUsers?: boolean;
    pushConfig?: ZIMPushConfig;
}
export interface ZIMMessageEditConfig {
}
export interface ZIMMessageRevokeConfig {
    revokeExtendedData?: string;
    pushConfig?: ZIMPushConfig;
}
export interface ZIMConversationListQueriedResult {
    conversationList: ZIMConversation[];
}
export interface ZIMConversationQueriedResult {
    conversation: ZIMConversation;
}
export interface ZIMConversationDeletedResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
}
export interface ZIMConversationNotificationStatusSetResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
}
export interface ZIMConversationUnreadMessageCountClearedResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
}
export interface ZIMMessageDeletedResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
}
export interface ZIMMessageSentResult {
    message: ZIMMessage;
}
export interface ZIMMessageEditedResult {
    message: ZIMMessage;
}
export interface ZIMMessageInsertedResult {
    message: ZIMMessage;
}
export interface ZIMMessageLocalExtendedDataUpdatedResult {
    message: ZIMMessage;
}
export interface ZIMMessageQueriedResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
    messageList: ZIMMessage[];
}
export interface ZIMConversationMessageReceiptReadSentResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
}
export interface ZIMMessageReceiptsReadSentResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
    errorMessageIDs: string[];
}
export interface ZIMMessageReceiptsInfoQueriedResult {
    infos: ZIMMessageReceiptInfo[];
    errorMessageIDs: string[];
}
export interface ZIMMessageRevokedResult {
    message: ZIMRevokeMessage;
}
export interface ZIMConversationPinnedStateUpdatedResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
}
export interface ZIMConversationPinnedListQueriedResult {
    conversationList: ZIMConversation[];
}
export interface ZIMConversationsSearchedResult {
    nextFlag?: number;
    conversationSearchInfoList: ZIMConversationSearchInfo[];
}
export interface ZIMMessagesGlobalSearchedResult {
    messageList: ZIMMessage[];
    nextMessage?: ZIMMessage;
}
export interface ZIMMessagesSearchedResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
    messageList: ZIMMessage[];
    nextMessage?: ZIMMessage;
}
export interface ZIMMessageReactionAddedResult {
    reaction: ZIMMessageReaction;
}
export interface ZIMMessageReactionDeletedResult {
    reaction: ZIMMessageReaction;
}
export interface ZIMMessageReactionUserListQueriedResult {
    totalCount: number;
    nextFlag: number;
    reactionType: string;
    userList: ZIMMessageReactionUserInfo[];
    message: ZIMMessage;
}
export interface ZIMCombineMessageDetailQueriedResult {
    message: ZIMCombineMessage;
}
export interface ZIMConversationDraftSetResult {
    conversationID: string;
    conversationType: ZIM.ConversationType;
}
export interface ZIMMessageRepliedListQueryConfig {
    count: number;
    nextFlag: number;
}
export interface ZIMMessageRepliedListQueriedResult {
    nextFlag: number;
    rootRepliedInfo: ZIMMessageRootRepliedInfo;
    messageList: ZIMMessage[];
}
export interface ZIMConversationMarkSetResult {
    failedConversationInfos: ZIMConversationBaseInfo[];
}
export interface ZIMConversationTotalUnreadMessageCountQueriedResult {
    unreadMessageCount: number;
}
