app.controller("centroCustosController", function ($scope, $modal, $rootScope, dataService, httpRequestFactory, notificationFactory,ngProgress) {
    $scope.separador = [];
    $scope.separador[0] = true;
    $scope.separador[1] = false;
    $scope.separador[2] = false;
    $scope.separador[3] = false;
    $scope.lstNivelEnsino = [];
    $scope.lstTipoEnsino = [];
    $scope.lstEscolas = [];
    $scope.lAnalitica = [];
    $scope.lstFinal = [];
    $scope.lstSelecionados = [];
    $scope.lstExistentes = [];
    $scope.lstNivel1 = [];
    $scope.idEdificio = 0;
    $scope.idPiso = 0;
    $scope.idSala = 0;
    $scope.emExecucao = false;
    $scope.anoletivo = 0;
    $scope.refrescarLstSelecionados = true;

    
    $scope.mostraSeparador = function (i) {
        if (i < 0 || i > $scope.separador.length-1)
            return;
        for (j = 0; j < $scope.separador.length; j++)
            $scope.separador[j] = false;
        
        $scope.separador[i] = true;
    };

    $scope.selNivelEnsino = function (row) {
        $scope.selectedNivelEnsino = row;
    }

    $scope.setLocal = function (idEdificio,idPiso,idSala) {
        $scope.idEdificio = idEdificio;
        $scope.idPiso = idPiso;
        $scope.idSala = idSala
        
    };

    $scope.idInventario = 0;
    $scope.anoEconomico = new Date().getFullYear();
    
    $scope.setIdInventario = function (id) {
        $scope.idInventario = id;
    }

    $scope.devAnoLetivoLista = function (id) {
        var ano = null;

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

            if ($scope.lstAnosLetivos[i].anoLetivo == id) {
                ano = $scope.lstAnosLetivos[i];
                break;
            }
        }

        return ano;
    };

    /*$scope.carregarAnosLetivos = function () {
        var anoAtual = new Date().getFullYear();
        $scope.lstAnosLetivos = [];
        for (i = 2015; i <= anoAtual + 1; i++) {
            var p2 = i + 1;
            var item = { anoLetivo: i, descricao: i+'/'+p2 }
            $scope.lstAnosLetivos.push(item);
        }
       
        
        $scope.selectedAnoLetivo = $scope.lstAnosLetivos[0];

    };*/

    $scope.carregar = function (idInventario) {
        $scope.verEndPoint();

        if ($scope.lstAnosLetivos == null)
            $scope.lstAnosLetivos = [];
        
        if ($scope.lstAnosLetivos.length == 0) {
            var getSuccessCallback = function (data, status) {
                $scope.lstAnosLetivos = data.LstAnosLetivos;
                $scope.selectedAnoLetivo = $scope.devAnoLetivoLista(data.AnoLetivoAtivo);
                $scope.carregarCC(idInventario);
            };

            var errorCallback = function (data, status, headers, config) {
                $scope.emExecucao = false;
            };

            var parametros = {};
            $scope.emExecucao = true;
            httpRequestFactory.getData('../api/configuracao/anoletivo', parametros).success(getSuccessCallback).error(errorCallback);
            return;
        }

        $scope.carregarCC(idInventario);
    };

    $scope.carregarGuardados = function () {
        $scope.verEndPoint();

        if ($scope.lstAnosLetivos == null)
            $scope.lstAnosLetivos = [];
        
        if ($scope.lstAnosLetivos.length == 0) {
            var getSuccessCallback = function (data, status) {
                $scope.lstAnosLetivos = data.LstAnosLetivos;
                $scope.selectedAnoLetivo = $scope.devAnoLetivoLista(data.AnoLetivoAtivo);
                $scope.carregarGuardadosCC();
            };

            var errorCallback = function (data, status, headers, config) {
                $scope.emExecucao = false;
            };

            var parametros = {};
            $scope.emExecucao = true;
            httpRequestFactory.getData('../api/configuracao/anoletivo', parametros).success(getSuccessCallback).error(errorCallback);
            return;
        }

        $scope.carregarGuardadosCC();
    };


    $scope.selAnoLetivo = function (item) {
        $scope.selectedAnoLetivo = item;
    };

    /*$scope.carregar = function (idInventario) {
        $scope.verEndPoint();

        if ($scope.lstAnosLetivos == null)
            $scope.carregarAnosLetivos(idInventario);
        else if ($scope.lstAnosLetivos.length == 0)
            $scope.carregarAnosLetivos(idInventario);
    };*/

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

            $scope.lstNivelEnsino = data.ListaNivelEnsino;
            $scope.lAnalitica=data.LstAnalitica;
            $scope.lstEscolas = data.ListaEscolas;
            $scope.lstTipoEnsino = data.ListaTipoEnsino;
            $scope.lstFinal = $scope.lAnalitica;
            $scope.lstNivel1 = data.ListaNivel1;
            $scope.lstExistentes = data.ListaSelecionados;
            $scope.lstSelecionados = angular.copy(data.ListaSelecionados);
            $scope.idInventario = idInventario;
            $scope.emExecucao = false;

        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
        };

        var anoletivo = $scope.selectedAnoLetivo.anoLetivo;
        //console.log($scope.selectedAnoLetivo);
        $scope.anoEconomico = anoletivo + 1;
        $scope.emExecucao = true;

        httpRequestFactory.getDataId('../api/centrocustos',idInventario+'/'+anoletivo+'/'+$scope.anoEconomico).success(getSuccessCallback).error(errorCallback);

    };

    //$scope.carregar = function (idInventario) {
    //    $scope.verEndPoint();

    //    if ($scope.lstAnosLetivos == null)
    //        $scope.carregarAnosLetivos();
    //    else if ($scope.lstAnosLetivos.length == 0)
    //        $scope.carregarAnosLetivos();

    //    var getSuccessCallback = function (data, status) {
            
    //        $scope.lstNivelEnsino = data.ListaNivelEnsino;
    //        $scope.lAnalitica=data.LstAnalitica;
    //        $scope.lstEscolas = data.ListaEscolas;
    //        $scope.lstTipoEnsino = data.ListaTipoEnsino;
    //        $scope.lstFinal = $scope.lAnalitica;
    //        $scope.lstNivel1 = data.ListaNivel1;
    //        $scope.lstExistentes = data.ListaSelecionados;
    //        $scope.lstSelecionados = angular.copy(data.ListaSelecionados);
    //        $scope.idInventario = idInventario;
    //        $scope.emExecucao = false;
            
    //    };

    //    var errorCallback = function (data, status, headers, config) {
    //        $scope.emExecucao = false;
    //    };

    //    var anoletivo = $scope.selectedAnoLetivo.anoLetivo;
    //    $scope.anoEconomico = anoletivo + 1;
    //    $scope.emExecucao = true;

    //    httpRequestFactory.getDataId('../api/centrocustos',idInventario+'/'+anoletivo+'/'+$scope.anoEconomico).success(getSuccessCallback).error(errorCallback);

    //};

    //$scope.carregarGuardados = function () {
    //    $scope.verEndPoint();

    //    if ($scope.lstAnosLetivos == null)
    //        $scope.carregarAnosLetivos();
    //    else if ($scope.lstAnosLetivos.length == 0)
    //        $scope.carregarAnosLetivos();

    //    var getSuccessCallback = function (data, status) {
    //        $scope.lstNivelEnsino = data.ListaNivelEnsino;
    //        $scope.lAnalitica = data.LstAnalitica;
    //        $scope.lstEscolas = data.ListaEscolas;
    //        $scope.lstTipoEnsino = data.ListaTipoEnsino;
    //        $scope.lstFinal = $scope.lAnalitica;
    //        $scope.lstNivel1 = data.ListaNivel1;
    //        $scope.lstExistentes = data.ListaSelecionados;
            
    //        $scope.lstSelecionados = angular.copy(data.ListaSelecionados);
    //        $scope.emExecucao = false;
    //    };

    //    var errorCallback = function (data, status, headers, config) {
    //        $scope.emExecucao = false;
    //    };
    //    var parametros = {
    //        edificio: $scope.idEdificio,
    //        piso: $scope.idPiso,
    //        sala: $scope.idSala
    //    };

    //    var anoletivo = $scope.selectedAnoLetivo.anoLetivo;
    //    $scope.anoEconomico = anoletivo + 1;

    //    $scope.emExecucao = true;
    //    httpRequestFactory.getData('../api/centrocustos/local/'+anoletivo+'/'+$scope.anoEconomico, parametros).success(getSuccessCallback).error(errorCallback);

    //};

    $scope.carregarGuardadosCC = function () {
        var getSuccessCallback = function (data, status) {
            $scope.lstNivelEnsino = data.ListaNivelEnsino;
            $scope.lAnalitica = data.LstAnalitica;
            $scope.lstEscolas = data.ListaEscolas;
            $scope.lstTipoEnsino = data.ListaTipoEnsino;
            $scope.lstFinal = $scope.lAnalitica;
            $scope.lstNivel1 = data.ListaNivel1;
            $scope.lstExistentes = data.ListaSelecionados;

            $scope.lstSelecionados = angular.copy(data.ListaSelecionados);
            $scope.emExecucao = false;
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
        };
        var parametros = {
            edificio: $scope.idEdificio,
            piso: $scope.idPiso,
            sala: $scope.idSala
        };

        var anoletivo = $scope.selectedAnoLetivo.anoLetivo;
        $scope.anoEconomico = anoletivo + 1;

        $scope.emExecucao = true;
        httpRequestFactory.getData('../api/centrocustos/local/' + anoletivo + '/' + $scope.anoEconomico, parametros).success(getSuccessCallback).error(errorCallback);

    };
      

    $scope.guardaDados = function () {
        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            
            $scope.emExecucao = false;
            ngProgress.complete();
            $scope.carregarGuardados();
            if ($scope.lstSelecionados.length > 0)
                $scope.lstExistentes = $scope.lstSelecionados;
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
            $scope.emExecucao = false;
            ngProgress.reset();
        };
        
        if ($scope.refrescarLstSelecionados == true)
            $scope.filtraSelecionados();


        var lst = $scope.lstSelecionados;
        if ($scope.lstSelecionados.length == 0)
            lst = $scope.lstExistentes;

       

        var dados = {
            Lst: lst,
            IdEdificio: $scope.idEdificio,
            IdPiso: $scope.idPiso,
            IdSala: $scope.idSala,
            AnoLetivo: $scope.selectedAnoLetivo.anoLetivo,
            Ano: $scope.anoEconomico
        }

        $scope.emExecucao = true;
        httpRequestFactory.addData('../api/centrocustos', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();

    };

    $scope.guardar = function (idInventario) {
        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            
            $scope.emExecucao = false;
            ngProgress.complete();
            $scope.carregar($scope.idInventario);
            if ($scope.lstSelecionados.length > 0)
                $scope.lstExistentes = $scope.lstSelecionados;
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
            $scope.emExecucao = false;
            ngProgress.reset();
        };
                
        if ($scope.refrescarLstSelecionados == true)
            $scope.filtraSelecionados();
        

        $scope.emExecucao = true;
                
        var lst = $scope.lstSelecionados;
        if ($scope.lstSelecionados.length == 0)
            lst = $scope.lstExistentes;

        

        var dados = {
            Lst: lst,
            IdInventario: idInventario,
            AnoLetivo: $scope.selectedAnoLetivo.anoLetivo,
            Ano: $scope.anoEconomico
        }

        httpRequestFactory.addData('../api/centrocustos/inv', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();

    };

    $scope.excluir = function (row) {
        if (row == null)
            return;
        for (i=0; i<$scope.lstExistentes.length; i++)
        {
            var item = $scope.lstExistentes[i];
            if (item==row)
            {
                $scope.lstExistentes.splice(i, 1);
                break;
            }
        }
    };

    $scope.selRow = function(row) {
        $scope.selectedRow = row;
    }

    $scope.contaNovaSubstituir = "";

    
    $scope.substituirConta = function (idInv) {
        
        if ($scope.selectedRow == null) {
            notificationFactory.error("Escolha a linha com a conta que deseja substituir")
            return;
        }

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

            $scope.emExecucao = false;
            ngProgress.complete();
            $scope.carregar(idInv);
            if ($scope.lstSelecionados.length > 0)
                $scope.lstExistentes = $scope.lstSelecionados;
        };

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

        if ($scope.refrescarLstSelecionados == true)
            $scope.filtraSelecionados();


        $scope.emExecucao = true;
        var d = angular.copy($scope.selectedRow);
        d.CodNivel5 = $scope.contaNovaSubstituir;
        d.Ano = $scope.anoEconomico;
        var info = {
            ContaSubstituir: $scope.selectedRow.CodNivel5,
            Dados:d,
            AnoLetivo: $scope.selectedAnoLetivo.anoLetivo
        };
                
        httpRequestFactory.addData('../api/centrocustos/corrigeContas', info).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.substituirContaLocal = function () {
        if ($scope.selectedRow == null) {
            notificationFactory.error("Escolha a linha com a conta que deseja substituir")
            return;
        }

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

            $scope.emExecucao = false;
            ngProgress.complete();
            $scope.carregarGuardados();
            if ($scope.lstSelecionados.length > 0)
                $scope.lstExistentes = $scope.lstSelecionados;
        };

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

        if ($scope.refrescarLstSelecionados == true)
            $scope.filtraSelecionados();


        $scope.emExecucao = true;
        var d = angular.copy($scope.selectedRow);
        d.CodNivel5 = $scope.contaNovaSubstituir;
        d.IdEdificio= $scope.idEdificio;
        d.IdPiso= $scope.idPiso;
        d.IdSala = $scope.idSala;
        d.Ano = $scope.anoEconomico;
        var info = {
            ContaSubstituir: $scope.selectedRow.CodNivel5,
            Dados: d,
            AnoLetivo: $scope.selectedAnoLetivo.anoLetivo
        };
        

        httpRequestFactory.addData('../api/centrocustos/corrigeContas/local', info).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };


    $scope.getNiveisEnsinoEscolhidos = function () {
        var lst = [];

        for (n = 0; n < $scope.lstNivelEnsino.length; n++) {
            var item = $scope.lstNivelEnsino[n];
            if (item.Escolhido == true) {
                var idNivel = item.Nivel;
                lst.push(idNivel);
            }
        }
        return lst;
    };

    $scope.getEscolasEscolhidas = function () {
        var lst = [];

        for (n = 0; n < $scope.lstEscolas.length; n++) {
            var item = $scope.lstEscolas[n];
            if (item.Escolhido == true) {
                var idEscola = item.IdEscola;
                lst.push(idEscola);
            }
        }
        return lst;
    };

    $scope.getTipoEnsinoEscolhidos = function () {
        var lst = [];

        for (n = 0; n < $scope.lstTipoEnsino.length; n++) {
            var item = $scope.lstTipoEnsino[n];
            if (item.Escolhido == true) {
                var tipo = item.TipoEnsino;
                lst.push(tipo);
            }
        }
        return lst;
    };

    $scope.getNivel1Escolhidos = function () {
        var lst = [];

        for (n = 0; n < $scope.lstNivel1.length; n++) {
            var item = $scope.lstNivel1[n];
            if (item.Escolhido == true) {
                var cod = item.Codigo;
                lst.push(cod);
            }
        }
        return lst;
    };

  

    $scope.filtraDados = function () {
               
    };


    $scope.showNiveis = function (item) {
        var lstNiveisEscolhidos = $scope.getNivel1Escolhidos();
        var existe = (lstNiveisEscolhidos.indexOf(item.CodNivel1) >= 0);

        return existe;
            
    };


    $scope.ativaItem = function (row) {
       
        $scope.refrescarLstSelecionados = true;
    };

    $scope.seleccionarTodos = function (modo) {
        
        for (i = 0; i < $scope.lstFinal.length; i++)
            $scope.lstFinal[i].Escolhido = modo;

        $scope.refrescarLstSelecionados = true;
    };

    $scope.filtraSelecionados = function () {

        $scope.lstSelecionados = [];
                        
        for (i = 0; i < $scope.lAnalitica.length; i++) {
            var info = $scope.lAnalitica[i];
            if (info.Escolhido==true) {
                //info.Percent = percent;
                //info.Percent = 0;
                $scope.lstSelecionados.push(info);
            }

        }

        for (i = 0; i < $scope.lstSelecionados.length; i++) {
            var info = $scope.lstSelecionados[i];
            if (info.Percent == 0 || info.percent==null)
            {
                var percent = 0;
                if ($scope.lstSelecionados.length != 0)
                    percent = 100.0 / $scope.lstSelecionados.length;
                info.Percent = percent;
            }
             
        }
        $scope.refrescarLstSelecionados = false;
    };

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

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

        var dados = {};

        httpRequestFactory.getData('../api/centrocustos/verificaEndpoint', dados).success(getSuccessCallback).error(errorCallback);
    };
    
    $scope.tipout = window.sessionStorage.getItem('tipout.cibe.inovar');

    $scope.validaDadosConta = function (dados) {
        if (dados.Conta == '') {
            notificationFactory.error("Conta inválida");
            return false;
        }
        if (dados.Descricao == '') {
            notificationFactory.error("Descrição inválida");
            return false;
        }

        return true;
    };

    $scope.gravaContaPlano = function (dados) {

        if ($scope.validaDadosConta(dados) == false)
            return;

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            ngProgress.complete();
            $scope.estaGravar = false;
        };

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

        httpRequestFactory.postData('../api/centrocustos/gravarConta', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
        $scope.estaGravar = true;
    };

    $scope.modalEditaConta = function (info, anoletivo, callbackOk, args) {
        $scope.carregaCamadas();

        if (info == null) {
            info = {
                Conta: '',
                Descricao: '',
                AnoLetivo: anoletivo,
                Pk_Conta: 0,
                Camada: 1,
                Ativa: false
            };
        }

        $scope.selCamada($scope.devCamadaLista(info.Camada));

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarContaCustos.html',
            controller: 'modalController',
            size: 'md',
            resolve: {
                items: function () { return info; }
            }
        });

        modalInstance.result.then(function (item) {
            if (callbackOk != null)
                callbackOk.apply(this, args);
        }, function () {

        });
    };

    $scope.lstCamadas = [];
    $scope.carregaCamadas = function () {
        $scope.lstCamadas = [
        { id: 1, nivel: 'Nivel 1' },
        { id: 2, nivel: 'Nivel 2' },
        { id: 3, nivel: 'Nivel 3' },
        { id: 4, nivel: 'Nivel 4' },
        { id: 5, nivel: 'Nivel 5' }
        ];
    }
    

    $scope.selCamada = function (item) {
        $scope.selectedCamada = item;
    };

    $scope.devCamadaLista = function (id) {
        var camada = null;
        
        for (k = 0; k < $scope.lstCamadas.length; k++) {
            
            if ($scope.lstCamadas[k].id == id) {
                camada = $scope.lstCamadas[k];
                break;
            }
        }

        
        return camada;
    };
    
});