const Phaser = require('phaser');
const { POSITIONS: { COMBAT }, TEXT } = require('./constants');

class CombatLog extends Phaser.Scene {
    constructor() {
        super({ key: 'CombatLog' });
    }

    create(game) {
        this.registry.events.on('changedata', this.updateData, this);
        this.cameras.main.setViewport(COMBAT.LOG.x(), COMBAT.LOG.y(), COMBAT.LOG.width(), COMBAT.LOG.height());
        this.log = this.add.text(0, 0, '', TEXT.NORMAL);
        this.logIndex = game.log.length;
        this.logData = game.log;
        this.log.setWordWrapWidth(COMBAT.LOG.width());
        this.log.setText(Array.from(game.log).reverse());
    }

    updateData(parent, key, data) {
        const UPDATE_KEYS = ['game', 'gameLog'];
        if (UPDATE_KEYS.includes(key) && data) {
            if (key === 'game') {
                this.logData = data.log;
            }
            if (key === 'gameLog') {
                this.logIndex = data;
            }
            this.updateLog();
        }
        return true;
    }

    updateLog() {
        // shallow copy because reverse mutates
        if (this.logData.length > this.logIndex + 1
            && Array.from(this.logData)[this.logIndex].slice(-2) === 'KO') {
            this.logIndex += 1;
            this.registry.set('gameLog', this.logIndex);
        }
        // }
        this.log.setText(Array.from(this.logData).slice(0, this.logIndex).reverse());
    }

    cleanUp() {
        this.registry.events.off('changedata', this.updateData);
        this.scene.remove();
    }
}

module.exports = CombatLog;
