angular.module('RDash')
      .controller('homeCtrl', ['$scope','$http', '$log', 'uiGridConstants', 'listvcfService', homeCtrl]);


      function homeCtrl($scope, $http, $log, uiGridConstants, listvcfService) {
        //Configuração da paginação
        var paginationOptions = {
            sort: null
        };

        //Configuração da grid
        $scope.gridOptions = {
          paginationPageSizes: [10, 20, 30, 50],
          paginationPageSize: 10,
          useExternalPagination: true,
          useExternalSorting: true,
          enableGridMenu: true,
          columnDefs: [
            { name: 'VCF_NAME', displayName: 'VCF'},
            { name: 'DH_INCLUSAO', displayName:'Data de Inclusão'},
            { name: 'DH_ANALISE', displayName: 'Data de Modificação'},
            { name: 'ANALISTA', displayName: 'Analista'},
            { name: 'STATUS', displayName: 'Status',

              //Configuração de cores da coluna STATUS - Critério André, David e Miguel
              cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex){
                if(grid.getCellValue(row, col) === 'Não analisado'){
                  return '';
                }
                if(grid.getCellValue(row, col) === 'Em análise'){
                  return '';
                }
                if(grid.getCellValue(row, col) === 'Análise concluida'){
                  return '';
                }
                if(grid.getCellValue(row, col) === 'Caso concluído'){
                  return '';
                }
              }
            }
          ],

          //Configuração de exportação de dados
          exporterAllDataFn: function() {
            return getPage(1, $scope.gridOptions.totalItems, paginationOptions.sort)
            .then(function() {
              $scope.gridOptions.useExternalPagination = true;
              $scope.gridOptions.useExternalSorting = false;
              getPage = null;
            });
          },

          //Configuração de páginação
          onRegisterApi: function(gridApi) {
            $scope.gridApi = gridApi;
//            $scope.gridApi.grid.registerRowsProcessor($scope.singleFilter);
            $scope.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {
              if(getPage) {
                if (sortColumns.length > 0) {
                  paginationOptions.sort = sortColumns[0].sort.direction;
                } else {
                  paginationOptions.sort = null;
                }
                getPage(grid.options.paginationCurrentPage, grid.options.paginationPageSize, paginationOptions.sort)
              }
          });

          gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
            if(getPage) {
              getPage(newPage, pageSize, paginationOptions.sort);
            }
          });
        }
      };

      //Resgatando dados do banco
      var getPage = function(curPage, pageSize){
        console.log('Recuperando dados do banco...');
        var ENDPOINT = "http://52.86.161.193:3000";
        var URL = ENDPOINT + "/home";

        var req = {
          method: 'GET',
          url: URL
        }

        console.log('Fazendo transfência via HTTP');
        $http(req).success(function(data){
          var firstRow = (curPage - 1) * pageSize;
          $scope.gridOptions.totalItems = data.registros.length;
          $scope.gridOptions.data = data.registros.slice(firstRow, firstRow + pageSize);
          console.log('Transfência concluida');
        });
      };

      //Chamando a grid para mostrar os dados
      getPage(1,$scope.gridOptions.paginationPageSize);


      //Filtrando dados da grid
      $scope.filter = function(){
        $scope.gridApi.grid.refresh();
      };

      //Filtro de busca
//      $scope.singleFilter = function(renderableRows){
//        var matcher = new RegExp($scope.filterValue);
//        renderableRows.forEach(function(row){
//            var match = false;
//            ['vcf_name', 'dh_inclusao', 'dh_analise', 'analista', 'status'].forEach(function(field){
//              if(row.entity[field].match(matcher)){
//                match = true;
//              }
//            });
//              if(!match){
//                row.visible = false;
//              }
//        });
//          return renderableRows;
//      };

      //Selecionando apenas um arquivo
      $scope.gridOptions.multiSelect = false;

      //Abrir arquivo VCF
      $scope.analisaVCF = function(row){
        listvcfService.setVCF($scope.gridApi.selection.getSelectedRows());
        console.log(listvcfService.getVCF());
        location.href = "#/sql";
        // listvcfService.addProduct("produto");
        // console.log(listvcfService.getProducts());
      }

      //Abrir análise prévia
      $scope.compareVCF = function(){
        if($scope.gridApi.selection.getSelectedRows().length > 0) {
          listvcfService.setVCF($scope.gridApi.selection.getSelectedRows());
          console.log(listvcfService.getVCF());
          location.href = "#/analises";
        } else {
          alert("Por favor selecione um VCF");
        }
      };
};
