import { JID } from '@xmpp/jid';
import { Subject } from 'rxjs';
import { DateMessagesGroup } from '../../../../../core/message-store';
import { LogService } from '../../../../log.service';
import { Recipient } from '../../../../../core/recipient';
import { RoomMetadata } from './multi-user-chat.plugin';
import { RoomOccupant } from './room-occupant';
import { RoomMessage } from './room-message';
import { OccupantChange } from './occupant-change';
export declare class Room {
    private readonly logService;
    readonly recipientType = "room";
    readonly roomJid: JID;
    occupantJid: JID | undefined;
    description: string;
    subject: string;
    avatar: string;
    metadata: RoomMetadata;
    private readonly messageStore;
    private readonly roomOccupants;
    private readonly onOccupantChangeSubject;
    readonly onOccupantChange$: import("rxjs").Observable<OccupantChange>;
    private readonly occupantsSubject;
    readonly occupants$: import("rxjs").Observable<RoomOccupant[]>;
    constructor(roomJid: JID, logService: LogService);
    get nick(): string;
    set nick(nick: string);
    private _name;
    get name(): string;
    set name(name: string | undefined);
    get jidBare(): JID;
    get messages$(): Subject<RoomMessage>;
    get messages(): RoomMessage[];
    get dateMessagesGroups(): DateMessagesGroup<RoomMessage>[];
    get oldestMessage(): RoomMessage;
    get mostRecentMessage(): RoomMessage;
    get mostRecentMessageReceived(): RoomMessage;
    get mostRecentMessageSent(): RoomMessage;
    addMessage(message: RoomMessage): void;
    equalsBareJid(other: Recipient | JID): boolean;
    hasOccupant(occupantJid: JID): boolean;
    getOccupant(occupantJid: JID): RoomOccupant | undefined;
    handleOccupantJoined(occupant: RoomOccupant, isCurrentUser: boolean): boolean;
    handleOccupantLeft(occupant: RoomOccupant, isCurrentUser: boolean): boolean;
    handleOccupantConnectionError(occupant: RoomOccupant, isCurrentUser: boolean): boolean;
    handleOccupantKicked(occupant: RoomOccupant, isCurrentUser: boolean, actor?: string, reason?: string): boolean;
    handleOccupantBanned(occupant: RoomOccupant, isCurrentUser: boolean, actor?: string, reason?: string): boolean;
    handleOccupantLostMembership(occupant: RoomOccupant, isCurrentUser: boolean): boolean;
    handleOccupantChangedNick(occupant: RoomOccupant, isCurrentUser: boolean, newNick: string): boolean;
    handleOccupantModified(occupant: RoomOccupant, oldOccupant: RoomOccupant, isCurrentUser: boolean): boolean;
    equals(other: Room | null | undefined): boolean;
    private addOccupant;
    private removeOccupant;
}
