var Nav = {

    ignorePush: false,

    triggers: [],

    expandMenu: () => {

        $('body').removeClass('collapsed-nav');
        localStorage.setItem('collapsed-nav', false);
        
    },
    
    collapseMenu: () => {
        
        $('body').addClass('collapsed-nav');
        localStorage.setItem('collapsed-nav', true);

    },

    get: (url) => {

        if(!url) return Promise.resolve();

        return new Promise((resolve, reject) => {

            $.ajax({
                url: url,
                type: 'GET',

                success: (data) => {

                    // Get only the main tags, using regexp
                    data = data.match(/<main>[\s\S]*<\/main>/g)[0];

                    // Remove the main tags
                    data = $($(data).html());

                    let title = data.filter('input[type=hidden]#title').val();

                    if (title) {

                        title = I18n.get(title);

                        document.title = title;

                    }

                    Menu.closeRight();

                    if(!Nav.ignorePush) {

                        history.pushState({}, '', url);

                    } else Nav.ignorePush = false;

                    resolve(data);

                    $('body').attr('data-url', url);

                    let baseUrl = url.split('?')[0];

                    setTimeout(function(){

                        Nav.triggers.forEach((trigger) => {

                            if(trigger.url == baseUrl) trigger.f(data);
    
                        });
    
                    }, 1);

                },

                error: (err) => {

                    reject(err);

                }

            });
            
        });

    },

    addTrigger(url, f){

        Nav.triggers.push({
            url: url,
            f: f
        });

    },

    on(url, f){

        Nav.triggers.push({
            url: url,
            f: f,
            anonymous: true
        });

    },

    getPage(){

        return location.pathname;

    },

    trigger(url){

        $('body').attr('data-url', url);

        Nav.triggers.forEach((trigger, k) => {

            if(trigger.url == url) trigger.f();

            // If anonymous, remove the trigger
            if(trigger.anonymous) Nav.triggers.splice(k, 1);

        });

    },

    back(){

        history.back();

    },

    to(url){

        let baseUrl = url.split('?')[0];

        Nav.get(url).then((data) => {

            $('main').empty();
            $('main').append(data);
    
            I18n.parse($('main'));
    
            Styles.parse($('main'));
    
            // Turn the link with the same href of the current page active
            $('nav a').removeClass('active');

            $('nav a[href="' + baseUrl + '"]').addClass('active');

            // Close menu
            Menu.closeRight();

        }).catch((err) => {
    
            console.log(err);
    
            Alerts.ok('Ocorreu um erro ao carregar a página', 'Certifique-se que você está com internet');
    
        });

    }

}

window.addEventListener('popstate', () => {

    Nav.ignorePush = true;

    Nav.to(location.pathname);

});

if(localStorage.getItem('collapsed-nav') == 'true') Nav.collapseMenu();
else Nav.expandMenu();