import { Message } from "./Message";
import { Logger } from "../Logger.js";
import { FIFOQueue } from "../FIFOQueue.js";
declare class MessagesQueue extends FIFOQueue<Message> {
    private maxSize;
    private rwlock;
    isFull: () => boolean;
    updateMessageIfExistsElseEnqueueIt: (message: any, forceDequeueIfFull?: boolean) => Message;
    removeMessage: (message: any) => Message;
    removeMessageById: (messageId: string) => Message;
    replaceMessage: (messageOld: any, messageNew: Message) => Message;
    replaceMessageById: (idMessageOld: string, messageNew: Message) => Message;
    constructor(_logger: any, _maxSize?: number);
    get length(): number;
}
/**
 * @class
 * @name Conversation
 * @public
 * @description
 *      This class represents a conversation <br>
 *		A conversation is a "long" interaction (aka the "long tail") between the user ane one or several contacts (Rainbow users or not) based on the IM media if the recipients are Rainbow users. <br>
 *		A conversation never ends and all interactions done can be retrieved. <br>
 */
declare class Conversation {
    get messages(): MessagesQueue;
    set messages(value: any);
    id: any;
    dbId: any;
    type: any;
    owner: any;
    contact: any;
    bubble: any;
    capabilities: any;
    avatar: any;
    presenceStatus: any;
    name: any;
    filterName: any;
    missedCounter: any;
    missedCalls: any;
    private _messages;
    participantStatuses: any;
    draft: any;
    uploadFile: any;
    status: any;
    historyIndex: any;
    historyMessages: any;
    historyDefered: any;
    historyComplete: any;
    lastModification: any;
    creationDate: any;
    lastMessageText: any;
    lastMessageSender: any;
    pip: any;
    videoCall: any;
    audioCall: any;
    pstnConferenceSession: any;
    webConferenceSession: any;
    isMutedAudio: any;
    isMutedVideo: any;
    infoVisible: any;
    muted: any;
    randomBase: any;
    messageId: any;
    currentHistoryId: any;
    static Status: any;
    static Type: any;
    static PEERTYPE: any;
    private static randomBase;
    private static messageId;
    preload: boolean;
    isFavorite: boolean;
    bookmark: {
        "messageId": string;
        "timestamp": string;
        "unreadMessageNumber": string;
    };
    pendingPromise: Array<any>;
    private logger;
    constructor(conversationId: any, logger: Logger, imsOptions: any);
    /**
     * @private
     * @method addMessage
     * @memberof Conversation
     * @instance
     */
    addOrUpdateMessage(message: any): any;
    /*************************************************************/
    /*************************************************************/
    static createOneToOneConversation(participant: any, logger: Logger, imsOptions: any): Conversation;
    static createBubbleConversation(bubble: any, logger: Logger, imsOptions: any): Conversation;
    generateRandomID(): string;
    static getUniqueMessageId(): string;
    /*************************************************************/
    /*************************************************************/
    static stringToStatus(status: any): any;
    /*************************************************************/
    /*************************************************************/
    reset(): void;
    resetHistory(): void;
    getMessageById(messId: any): Message;
    getlastEditableMsg(): Message;
}
/**
 * Enum peer type
 *
 * ```
 * {
 * "UNKNOWN" = "unknown", // when the peer type is unkwon
 * "USER" = "user", // when the peer type is a user of the rainbow system
 * "ROOM" = "room" // when the peer type is a bubble
 *  }
 * ```
 *
 * @public
 * @enum {number}
 * @readonly
 *
 */
declare enum PEERTYPE {
    /**
     * when the peer type is unkwon
     */
    "UNKNOWN" = "unknown",
    /**
     * when the peer type is a user of the rainbow system
     */
    "USER" = "user",
    /**
     * when the peer type is a bubble
     */
    "ROOM" = "room"
}
export { Conversation, MessagesQueue, PEERTYPE };
