<app>
    <div id="dash"></div>
    <style>
        :scope {
            position: relative;
        }
    </style>

    <script>
        var tag = this;

        tag.on('mount', function () {
            // Configure Router
            route.base('/')

// Home
            route('/', function () {
                var role = tag.get_role();
                switch (role) {
                    case ADMIN:
                    case AGENTE:
                        riot.mount('#dash', 'dashboard');
                        route('/ricerca-azienda', 'Agenti - Rovetta Safety');
                        break;
                    default:
                        route('/login', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route('/login', function () {
                var role = tag.get_role();
                switch (role) {
                    case ADMIN:
                    case AGENTE:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                    default:
                        riot.mount('#dash', 'login');
                        break;
                }
            });

            route('/reset', function () {
                var role = tag.get_role();
                switch (role) {
                    case ADMIN:
                    case AGENTE:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                    default:
                        riot.mount('#dash', 'reset');
                        break;
                }
            });

            route('/ricerca-azienda', function () {
                var role = tag.get_role();
                switch (role) {
                    case ADMIN:
                    case AGENTE:
                        riot.mount('#view', 'ricerca');
                        break;
                    default:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route('/inserisci-azienda..', function () {
                var role = tag.get_role();
                switch (role) {
                    case AGENTE:
                        var q = route.query();
                        var opts = {};
                        if (q.p_iva) {
                            opts.p_iva = q.p_iva;
                        }
                        riot.mount('#view', 'inserisci-azienda', opts);
                        break;
                    default:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route('/inserisci-visita..', function () {
                var role = tag.get_role();
                switch (role) {
                    case ADMIN:
                    case AGENTE:
                        var q = route.query();
                        var opts = {};
                        opts.p_iva = q.p_iva;
                        if (q.id_visit) {
                            opts.id_visit = parseInt(q.id_visit);
                        }
                        riot.mount('#view', 'inserisci-visita', opts);
                        break;
                    default:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route('/visualizza-aziende..', function () {
                var role = tag.get_role();
                switch (role) {
                    case AGENTE:
                        var q = route.query();
                        var opts = {};
                        if (q.color) {
                            opts.color = q.color;
                        }
                        riot.mount('#view', 'visualizza-aziende', opts);
                        break;
                    default:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route('/visualizza-mappa', function () {
                var role = tag.get_role();
                switch (role) {
                    case AGENTE:
                        riot.mount('#view', 'mappa');
                        break;
                    default:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route('/visualizza-documenti..', function () {
                var role = tag.get_role();
                switch (role) {
                    case AGENTE:
                        var qstr = window.location.hash;
                        var query = {};
                        var a = (qstr[0] === '?' ? qstr.substr(1) : qstr).split('&');
                        for (var i = 0; i < a.length; i++) {
                            var b = a[i].split('=');
                            query[decodeURIComponent(b[0].replace(/^#/, ""))] = decodeURIComponent(b[1] || '');
                        }
                        if (query.access_token) {
                            sessionStorage.setObject(API_DROPBOX, {access_token: query.access_token});
                            route('/visualizza-documenti', 'Agenti - Rovetta Safety');
                        } else {
                            riot.mount('#view', 'documenti');
                        }
                        break;
                    default:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route('/visualizza-agenti', function () {
                var role = tag.get_role();
                switch (role) {
                    case ADMIN:
                        riot.mount('#view', 'visualizza-agenti');
                        break;
                    default:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route('/visualizza-visite..', function () {
                var role = tag.get_role();
                switch (role) {
                    case ADMIN:
                        var q = route.query();
                        var opts = {};
                        if (q.agent_id) {
                            opts.agent_id = parseInt(q.agent_id);
                        }
                        if (q.p_iva) {
                            opts.p_iva = q.p_iva;
                        }
                        riot.mount('#view', 'ricerca-visite', opts);
                        break;
                    case AGENTE:
                        var q = route.query();
                        var opts = {};
                        opts.p_iva = q.p_iva;
                        riot.mount('#view', 'visualizza-visite', opts);
                        break;
                    default:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route('/modifica-password', function () {
                var role = tag.get_role();
                switch (role) {
                    case ADMIN:
                    case AGENTE:
                        riot.mount('#view', 'modifica-password');
                        break;
                    default:
                        route('/', 'Agenti - Rovetta Safety');
                        break;
                }
            });

            route.start(true);

            RiotBus.getInstance().on('users::logged-in', tag.usersLoggedIn);
            RiotBus.getInstance().on('users::logged-out', tag.usersLoggedOut);
        });

        tag.on('unmount', function () {
            RiotBus.getInstance().off('users::logged-in', tag.usersLoggedIn);
            RiotBus.getInstance().off('users::logged-out', tag.usersLoggedOut);
        });

        tag.usersLoggedIn = function (user) {
            tag.update();
            route('/');
        };

        tag.usersLoggedOut = function () {
            tag.update();
            route('/login');
        };
    </script>
</app>
