(function () {
    'use strict';

    angular
        .module('editorRotas')
        .directive('notificationMessages', notificationMessages);

    notificationMessages.$inject = ['$timeout', '$routeParams', '__env', 'ngNotify', '$cookies'];

    /* @ngInject */
    function notificationMessages($timeout, $routeParams, __env, ngNotify, $cookies) {
        var directive = {
            restrict: 'E',
            replace: true,
            templateUrl: __env.appPath + 'scripts/components/notification-messages/notification-messages.directive.html',
            link: link,
            scope: false
        };

        function link(scope, element) {

            angular.extend(scope.vm, {
                showNotification: showNotification
            });

            scope.showInfo = (msg) => { showNotification(msg, 'info'); };
            scope.showWarning = (msg) => { showNotification(msg, 'warn'); };
            scope.showError = (msg) => { showNotification(msg, 'error'); };
            scope.showSuccess = (msg) => { showNotification(msg, 'success', false); };

            function showNotification(msg, type, sticky = true, button = true) {
                ngNotify.set(msg, { type: type, sticky: sticky, button: button });
            }

            function showInitialMessages() {
                let mensagemServidor = $cookies.get('mensagem_servidor');
                if (mensagemServidor) {
                    mensagemServidor = JSON.parse(mensagemServidor);
                    $cookies.remove('mensagem_servidor', { path: '/' });

                    switch (mensagemServidor.tipo_mensagem) {
                        case 0: scope.showSuccess(mensagemServidor.texto_mensagem); break;
                        case 1: scope.showInfo(mensagemServidor.texto_mensagem); break;
                        case 2: scope.showWarning(mensagemServidor.texto_mensagem); break;
                        default: scope.showError(mensagemServidor.texto_mensagem); break;
                    }
                }
            }

            showInitialMessages();
        }

        return directive;
    }


})();
