class RoomNode {
    private room : RoomRandom;
    private mainDiv : HTMLElement = document.createElement("div");

    public constructor (room : RoomRandom) {
        this.room = room;
        this.mainDiv.classList.add("mapRoom");

        if (room != undefined) {
            this.mainDiv.classList.add("linked", room.getBackgroundClass());

            Room.DIRECTIONS.forEach((direction) => {
                if (room.connections[direction] != undefined) {
                    let directionDiv = document.createElement("div");
                    directionDiv.classList.add("mapRoomConnection" + DirectionNames[Direction[direction]]);
                    this.mainDiv.appendChild(directionDiv);
                }
            });

            Controls.Links.makeLink(this.mainDiv, new ActionGo(WorldState.player, room));

            // ASSUME THIS IS NOT UPDATED
            //this.update();
        }
    }

    public async createRoomNameFloater () {
        if (this.room != undefined) {
            let roomName = document.createElement("div");

            let sayName = new Say(this.room);
            await sayName.getPureElements().then(value => {
                value.forEach(element => {
                    roomName.appendChild(element);
                });

                Elements.HoverInfo.makeHoverable(this.mainDiv, value);
            });
        }
    }

    public async update () {
        if (this.room != undefined) {
            if (WorldState.player.getRoom() == this.room) {
                this.mainDiv.classList.add("current");
            } else {
                this.mainDiv.classList.remove("current");
            }


            let isRemembered = await WorldState.isRoomRemembered(this.room);
            if (!isRemembered) {
                this.mainDiv.classList.add("unknown");
            } else {
                this.mainDiv.classList.remove("unknown");
            }
        }
    }

    public getElement () {
        return this.mainDiv;
    }
}