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;
    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 ZIMMessageBase {
    type: ZIM.MessageType;
    extendedData?: string;
    localExtendedData?: string;
    isMentionAll?: boolean;
    mentionedUserIDs?: string[];
    /**
     * Required when type is Text or Command or Barrage.
     */
    message?: string | Uint8Array;
    /**
     * Required when sending local file message.
     */
    fileLocalPath?: string;
    /**
     * Required when sending remote file message.
     */
    fileDownloadUrl?: string;
    /**
     * Required for audio file.
     */
    audioDuration?: number;
    /**
     * Required for video file.
     */
    videoDuration?: number;
    /**
     * Required for multiple type.
     */
    messageInfoList?: ZIMMessageLiteInfo[];
}
export interface ZIMMessage extends ZIMMessageBase {
    localMessageID: string;
    messageID: string;
    messageSeq: number;
    senderUserID: string;
    timestamp: number;
    conversationID: string;
    conversationType: ZIM.ConversationType;
    direction: ZIM.MessageDirection;
    sentStatus: ZIM.MessageSentStatus;
    orderKey: number;
    isUserInserted: boolean;
    isBroadcastMessage: boolean;
    isServerMessage: boolean;
    receiptStatus: ZIM.MessageReceiptStatus;
    reactions: ZIMMessageReaction[];
    editorUserID: string;
    editedTime: number;
    rootRepliedCount: number;
    repliedInfo?: ZIMMessageRepliedInfo;
}
export interface ZIMMediaMessage extends ZIMMessage {
    type: ZIM.MessageType.Image | ZIM.MessageType.File | ZIM.MessageType.Audio | ZIM.MessageType.Video;
    fileLocalPath: string;
    fileDownloadUrl: string;
    fileName: string;
    fileSize: number;
    fileUID: string;
}
export interface ZIMTextMessage extends ZIMMessage {
    type: ZIM.MessageType.Text;
    message: 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 ZIMRevokeMessage extends ZIMMessage {
    type: ZIM.MessageType.Revoke;
    message: string;
    revokeType: ZIM.RevokeType;
    revokeStatus: ZIM.MessageRevokeStatus;
    revokeTimestamp: number;
    operatedUserID: string;
    revokeExtendedData: string;
    originalMessageType: ZIM.MessageType;
    originalTextMessageContent: 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;
    combineID: string;
    messageList: ZIMMessage[];
}
export interface ZIMTipsMessage extends ZIMMessage {
    type: ZIM.MessageType.Tips;
    event: ZIM.TipsMessageEvent;
    operatedUser: ZIMUserInfo;
    targetUserList: ZIMUserInfo[];
    changeInfo?: ZIMTipsMessageChangeInfo;
}
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 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 ZIMMultipleMessage extends ZIMMessage {
    type: ZIM.MessageType.Multiple;
    messageInfoList: ZIMMessageLiteInfo[];
}
export interface ZIMMessageLiteInfo {
    type: ZIM.MessageType;
}
export interface ZIMMediaMessageLiteInfo extends ZIMMessageLiteInfo {
    type: ZIM.MessageType.Image | ZIM.MessageType.File | ZIM.MessageType.Audio | ZIM.MessageType.Video;
    fileSize: number;
    fileName: string;
    fileDownloadUrl: string;
    fileLocalPath?: string;
}
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 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 ZIMMultipleMessageLiteInfo extends ZIMMessageLiteInfo {
    type: ZIM.MessageType.Multiple;
    messageInfoList: ZIMMessageLiteInfo[];
}
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;
}
