class Notification {

    constructor(elem) {
        this.elem = elem;
        this.type = elem.getAttribute('notification');
        this.textElem = elem.querySelector('span');
        this.autohide = this.elem.hasAttribute('data-autohide');
        window.Events.listen(this.type, text => {
            console.log('show', text);
            this.show(text);
        });
        elem.addEventListener('click', this.hide.bind(this));
        if (elem.hasAttribute('data-show')) this.show(this.textElem.textContent);
    }

    show(textToShow = '') {
        this.textElem.textContent = textToShow;
        this.elem.style.display = 'block';
        setTimeout(() => {
            this.elem.classList.add('showing');
        }, 1);

        if (this.autohide) setTimeout(this.hide.bind(this), 2000);
    }

    hide() {
        this.elem.classList.remove('showing');

        function transitionEnd() {
            this.elem.style.display = 'none';
            this.elem.removeEventListener('transitionend', transitionEnd);
        }

        this.elem.addEventListener('transitionend', transitionEnd.bind(this));
    }

}

module.exports = Notification;