'use strict';

const views = require('../util/views.js');

const template = views.getTemplate('top-navigation');

class TopNavigationView {
    constructor() {
        this._hostNode = document.getElementById('top-navigation-holder');
    }

    get _mobileNavigationToggleNode() {
        return this._hostNode.querySelector('#mobile-navigation-toggle');
    }

    get _navigationListNode() {
        return this._hostNode.querySelector('nav > ul');
    }

    get _navigationLinkNodes() {
        return this._navigationListNode.querySelectorAll('li > a');
    }

    render(ctx) {
        views.replaceContent(this._hostNode, template(ctx));

        this._bindMobileNavigationEvents();
    }

    activate(key) {
        for (let itemNode of this._hostNode.querySelectorAll('[data-name]')) {
            itemNode.classList.toggle(
                'active', itemNode.getAttribute('data-name') === key);
        }
    }

    _bindMobileNavigationEvents() {
        this._mobileNavigationToggleNode.addEventListener(
            'click', e => this._mobileNavigationToggleClick(e));

        for (let navigationLinkNode of this._navigationLinkNodes) {
            navigationLinkNode.addEventListener(
                'click', e => this._navigationLinkClick(e));
        }
    }

    _mobileNavigationToggleClick(e) {
        this._navigationListNode.classList.toggle('opened');
    }

    _navigationLinkClick(e) {
        this._navigationListNode.classList.remove('opened');
    }
}

module.exports = TopNavigationView;