import { makeObservable, observable, computed, action } from 'mobx';const MAX_ROOM_UPDATES = 10;export class Room {name;people = new Map();messages = [];roomUpdates = [];constructor(name) {makeObservable(this, {name: observable,people: observable,messages: observable,roomUpdates: observable,messageCount: computed,peopleCount: computed,lastMessage: computed,members: computed,addPerson: action,removePerson: action,addMessage: action,addStatusUpdate: action,dispose: action,});this.name = name;}get messageCount() {return this.messages.length;}get peopleCount() {return this.people.size;}get lastMessage() {if (this.messages.length === 0) {return null;}return this.messages[this.messages.length - 1];}get members() {return Array.from(this.people.values());}addPerson(person) {if (!this.people.has(person.id)) {this.people.set(person.id, person);person.addRoom(this);}}removePerson(personId) {const person = this.people.get(personId);if (person) {person.removeRoom(this);this.people.delete(personId);}}addMessage(message) {this.messages.push(message);message.author.setLastMessage(message);}addStatusUpdate(person, status) {this.roomUpdates.push(`${person.name} is now ${status}`);if (this.roomUpdates.length > MAX_ROOM_UPDATES * 2)this.roomUpdates = this.roomUpdates.slice(MAX_ROOM_UPDATES);}dispose(notifications) {this.people.forEach(person => person.removeRoom(this));if (notifications) {notifications.removeRoom(this.name);}}}