app.controller("perfilAcessoController", function ($scope, $http, $modal, $location, perfilFactory, notificationFactory, $rootScope) {
    $scope.perfis = [];

    $scope.listarPerfis = function (utilizador) {

        var getSuccessCallback = function (data, status) {

            $scope.lstperfis = data;

            $scope.seleccionarPerfis(utilizador);
        };


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


        perfilFactory.getPerfis().success(getSuccessCallback).error(errorCallback);

    };



    $scope.seleccionarPerfis = function (utilizador) {

        for (i = 0; i < $scope.lstperfis.length; i++) {

            if ($scope.verificaSeTemEstePerfil(utilizador, $scope.lstperfis[i].IdPerfil) == true)
                $scope.lstperfis[i].Pertence = true;
            else
                $scope.lstperfis[i].Pertence = false;
        }

    };

    $scope.verificaSeTemEstePerfil = function (utilizador, IdPerfil) {

        for (j = 0; j < utilizador.Perfis.length; j++) {


            if (utilizador.Perfis[j].FK_PerfilDaAplicacao == IdPerfil) {
                j = utilizador.Perfis.length;
                return true;
            }
        }
        return false;
    };

    $scope.carregarAcessos = function () {
        var getSuccessCallback = function (data, status) {
            $scope.perfis = data;

            if ($scope.perfis.length > 0)
                $scope.selPerfil($scope.perfis[0]);


        };


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


        perfilFactory.getAcessos().success(getSuccessCallback).error(errorCallback);

    };

    $scope.guardarAcessos = function () {

        if ($scope.perfis == null) {
            notificationFactory.error("Sem Dados");
            return;
        }


        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            sessionStorage.perfilPag = 2;
            setTimeout(function () { window.location.reload(); }, 700);
            //$location.path('/diversos/2');
        };


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


        perfilFactory.updateAcessos($scope.perfis).success(getSuccessCallback).error(errorCallback);

    };

    $scope.actualizarNomePerfil = function (perfil) {

        if (perfil == null) {
            notificationFactory.error("Seleccione um Perfil");
            return;
        }



        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            /*for (i = 0; i < perfil.Acessos.length; i++) {
                perfil.Acessos[i].NomePerfil = perfil.NomePerfil;
            }*/
            sessionStorage.perfilPag = 2;
            setTimeout(function () { window.location.reload(); }, 700);
            //$scope.carregarAcessos();
        };


        var errorCallback = function (data, status, headers, config) {
            //console.log($scope.NomeOriginal);

            $scope.selectedPerfil.NomePerfil = $scope.NomeOriginal;
            notificationFactory.error(data);
        };



        perfilFactory.updateNomePerfil(perfil).success(getSuccessCallback).error(errorCallback);
        //perfilFactory.updateAcessos($scope.perfis).success(getSuccessCallback).error(errorCallback);

    };

    $scope.novoPerfil = function (row) {

        if (row == null) {
            notificationFactory.error("Sem Dados");
            return;
        }


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

        };


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


        perfilFactory.addPerfil(row).success(getSuccessCallback).error(errorCallback);

    };

    $scope.removerPerfil = function (perfil) {

        if (perfil == null) {
            notificationFactory.erro("Seleccione um Perfil");
            return;
        }


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


        var errorCallback = function (data, status, headers, config) {

            notificationFactory.error(data);
        };


        perfilFactory.deletePerfil(perfil).success(getSuccessCallback).error(errorCallback);

    };

    $scope.confirmarRemoverPerfil = 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.removerPerfil(item);

        }, function () {

        });

    };

    $scope.selPerfil = function (row) {

        $scope.selectedPerfil = row;
        $scope.verificaSoLeitura();
    };

    $scope.verificaSoLeitura = function () {
        row = $scope.selectedPerfil;
        if (row == null)
            return;


        for (i = 0; i < row.Acessos.length; i++) {
            //console.log(row.Acessos[i].SoLeitura)
            if (row.Acessos[i].SoLeitura == true) {

                row.Acessos[i].PCriar = false;
                row.Acessos[i].PEditar = false;
                row.Acessos[i].PApagar = false;
            }
        }

    };

    $scope.perfilEditRow = function (row) {

        if (row == null) {
            row = {
                IdPerfil: 0,
                NomePerfil: "",
                op: "Novo"
            };
        }
        else {
            row.op = "Editar";
        }

        $scope.NomeOriginal = row.NomePerfil;

        var modalInstance = $modal.open(
        {

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

                items: function () {

                    return row;
                },

                //  isNew: false
            }
        });

        modalInstance.result.then(function (item) {
            if (item.op == "Novo") {
                $scope.selectedRow = item;
                $scope.novoPerfil(item);
            }
            else {

                $scope.actualizarNomePerfil(item);
            }


        }, function () {

        });

    };



    $scope.actualizarPerfisActivos = function (utilizador) {

        if (utilizador == null)
            return;
        utilizador.Perfis = [];
        for (i = 0; i < $scope.lstperfis.length; i++) {
            var item = {
                FK_PerfilDaAplicacao: $scope.lstperfis[i].IdPerfil,
                FK_Utilizador: utilizador.PK_Utilizador,
                Pertence: $scope.lstperfis[i].Pertence
            };

            utilizador.Perfis.push(item);
        }

        //console.log(JSON.stringify(utilizador.Perfis));
    };

    $scope.bloqueia = function () {
        //console.log($rootScope.root_nomePerfilSelecionado + '  ' + $scope.selectedPerfil.NomePerfil);
        return ($rootScope.root_nomePerfilSelecionado === 'Supervisor' && $scope.selectedPerfil.NomePerfil === 'Supervisor');
    }
});