app.controller("utilizadorController", function ($scope, $modal, $log, $http, utilizadorFactory, notificationFactory, httpRequestFactory, dataService, ngProgress, $rootScope) {
   
    $scope.users = [];

    

    $scope.carregarUtilizadores = function () {
        var getSuccessCallback = function (data, status) {

            $scope.users = data;

        };


        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        utilizadorFactory.getUtilizadores().success(getSuccessCallback).error(errorCallback);
    };

    $scope.actualizarUtilizador = function (ut) {
        
        if (ut == null)
            return;

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            $scope.carregarUtilizadores();
            $scope.$parent.iniciarPerfisUser();
        };


        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
            $scope.carregarUtilizadores();
        };

        utilizadorFactory.updateUtilizador(ut).success(getSuccessCallback).error(errorCallback);
    };

    $scope.inserirUtilizador = function (ut) {
        if (ut == null)
            return;

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            $scope.carregarUtilizadores();
        };


        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        utilizadorFactory.addUtilizador(ut).success(getSuccessCallback).error(errorCallback);
    };

    $scope.apagarUtilizador = function (elem) {
        if (elem == null)
            return;

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            $scope.carregarUtilizadores();
        };


        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        utilizadorFactory.deleteUtilizador(elem).success(getSuccessCallback).error(errorCallback);
        
    };

    $scope.selectItem = function (row) {
        $scope.selectedRow = row;

    };

    $scope.utilizadorEditRow = function (row) {
        
        if (row == null) {
            row = {

                Nome: 'Utilizador',
                Password: '',
                CPassword: '',
                Email: '',
                PK_Utilizador: 0
            }
            row.op = "Novo";
        }
        else
            row.op = "Editar";
        row.perm = $rootScope.perm_mnuUtilizadores;

        var modalInstance = $modal.open(
        {
            
            templateUrl: 'views/modalEditarUt.html?v='+new Date(),
            controller: 'modalController',
            resolve: {

                items: function () { return row; },

                //  isNew: false
            }
        });

        modalInstance.result.then(function (item) {
            if (item.op == "Editar") {
                $scope.selectedRow = item;
                $scope.actualizarUtilizador(item);
            }
            else
                $scope.inserirUtilizador(item);
            
        }, function () {
            
        });

    };

    $scope.confirmarApagarUtilizador = function (row) {

        if (row == null)
            return;
      

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmarApagar.html?v=' + new Date(),
            controller: 'modalController',
            resolve: {

                items: function () { return row; },

                //  isNew: false
            }
        });

        modalInstance.result.then(function (item) {
            $scope.apagarUtilizador(item);
        }, function () {

        });

    };

    $scope.listagemAcessosP = [];
    $scope.dataAcesso = dataService.devDataHoje();
    $scope.getListagemAcessosPrograma = function (dataStr) {
        if (dataStr == null)
            return;

        var getSuccessCallback = function (data, status) {
            $scope.listagemAcessosP = data;
        };


        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        var dt = dataService.toDataStr(dataStr);
        if (!dataService.dataIsValid(dt)) {
            notificationFactory.error("A Data não é válida.");
            return;
        }
        var h = { DataStr: dt };
        httpRequestFactory.getDataHeaders('../api/menuacessos/acesso/utilizadores', h).success(getSuccessCallback).error(errorCallback);

    };

    $scope.exportaExcelAcessosUtilizador = function (dataStr) {
        if (dataStr == null)
            return;

        var getSuccessCallback = function (data, status) {
            
            ngProgress.complete();

            var file = new Blob([data], { type: 'application/vnd.ms-excel' });
            var fileURL = URL.createObjectURL(file);
           
            var a = document.createElement('a');
            a.href = fileURL;
            a.download = "AcessosUtilizadores.xls";
            a.click();
            window.URL.revokeObjectURL(fileURL);
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
            ngProgress.reset();
        };

        var dt = dataService.toDataStr(dataStr);
        if (!dataService.dataIsValid(dt)) {
            notificationFactory.error("A Data não é válida.");
            return;
        }

        var dados = {
            ValorStr: dt
        };
        httpRequestFactory.getDownload('../api/menuacessos/acesso/utilizadores/excel', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.podeEditarUtilizador = function (idUt) {
        if (!sessionStorage.getItem('id.cibe.inovar'))
            return false;

        var id = Number(sessionStorage.getItem('id.cibe.inovar'));
        if (id == 5 && $rootScope.root_nomePerfilSelecionado === 'Supervisor')
            return true;
        if (sessionStorage.getItem('tipout.cibe.inovar') == 'Inovar') {
            return true;
        }
        
        if (id == idUt)
            return true;

        return false;
    }

});

