import * as EventEmitter from 'eventemitter3';
export class Line extends EventEmitter {
    constructor(text) {
        super();
        this.text = text;
        this.active = false;
    }
    getDOMNode() {
        this.container = document.createElement('div');
        this.container.setAttribute('aria-role', 'polite');
        this.textField = document.createElement('div');
        this.container.appendChild(this.textField);
        this.advanceButton = document.createElement('button');
        this.advanceButton.textContent = 'Advance';
        this.advanceButton.addEventListener('click', (event) => {
            this.emit('advance');
            this.active = false;
        });
        this.container.appendChild(this.advanceButton);
        return this.container;
    }
    display(element, appearingCharacters = false, appearingCharacterSpeed = 0) {
        this.active = true;
        this.textField.focus();
        if (!appearingCharacters) {
            this.textField.textContent = this.text;
        }
        else {
            this.fillText(0, appearingCharacterSpeed);
        }
    }
    fillText(index, speed) {
        if (!this.active)
            return;
        if (index > this.text.length) {
            return;
        }
        this.textField.textContent += this.text.charAt(index);
        this.emit('character.appear', this.textField.textContent);
        setTimeout(() => this.fillText((index += 1), speed), speed);
    }
    getAdvanceButton() {
        return this.advanceButton;
    }
}