app.controller('delegheSedaCtrl', 
function ($scope,$mdDialog, $window, $q,$location, $cookies, $mdBottomSheet, uiGridGroupingConstants, utilsSvc, DelegheSepa, Deleghe, Banche, 
		DisposizioniRid, DisposizioniAea, DisposizioniBonifici, userService, locals) {
	
	$scope.disposizione = locals.disposizione;
	$scope.tipo = locals.tipo;
	$scope.maxItems = 0;
	$scope.itemsPerPage = 1000;
	$scope.selectedIndex=-1;
	$scope.records=[];
	$scope.vistaAggregatoAbi = false;
	$scope.lastAbi = '';
	$scope.ricercaInCorso = false;
	$scope.fromDisposizioni = false;
	$scope.topPosition = 0;
	$scope.lastIndexToRetrieve = 0;
	
	$scope.getListHeight = function() {
		containerHeight = ($window.innerHeight - $('#container').position().top - $('#view').position().top-85);
		  return {'height':  containerHeight + 'px'};
	};
	$scope.getGridItemHeight = function() {
		return utilsSvc.getGridHeight();
	}
	$window.addEventListener('resize', onResize);
	function onResize() {
	  $scope.$digest();
	}
	$scope.$on('$destroy', function() {
	  $window.removeEventListener('resize', onResize);
	});
	
	$scope.filterChiamante = userService.getFiltroIncassiSDD();
	
	$scope.disabilitaFiltri = function() {
		return $scope.filterChiamante.tipoChiamata != "Destinatari";
	}
	
	$scope.filteredView = false;
	$scope.delegheSepa = [];
	$scope.filter = {
			tipo:'0',
			statoDelega: '-1',
			cbDaDataApertura: false,
			daDataApertura: null,
			cbADataApertura: false,
			aDataApertura: null,
			cbDaDataChiusura: false,
			daDataChiusura: null,
			cbDaDataChiusura: false,
			aDataChiusura: null,
			codiceDelega: '',
			aggregazioneABI: false,
			codiceAbi: '',
			codiceClienteDebitore: '',
			idOrdinante: -1
	}

	$scope.defaultFilter = {
			tipo:'0',
			statoDelega: '-1',
			cbDaDataApertura: false,
			daDataApertura: null,
			cbADataApertura: false,
			aDataApertura: null,
			cbDaDataChiusura: false,
			daDataChiusura: null,
			cbDaDataChiusura: false,
			aDataChiusura: null,
			codiceDelega: '',
			aggregazioneABI: false,
			codiceAbi: '',
			codiceClienteDebitore: '',
			idOrdinante: -1
	}
	
	if ($scope.tipo!='')
		$scope.filter.tipo='0';
	
	if ($scope.tipo=="RID") {
		$scope.filter.codiceClienteDebitore = $scope.disposizione.codiceClienteDebitore;
		$scope.fromDisposizioni = true;
		$scope.filteredView = true;
	} else if ($scope.tipo=='SCT') { 
		$scope.filter.codiceDestinatario = $scope.disposizione.codiceClienteDebitore;
		$scope.fromDisposizioni = true;
		$scope.filteredView = true;
	} else if ($scope.tipo=='SEDA') {
		$scope.filter.codiceClienteDebitore = $scope.disposizione.codiceClienteDebitore;
		$scope.fromDisposizioni = true;
		$scope.filteredView = true;
	}
	
	$scope.gridOptions = {
	        enableSorting: true,
	        columnDefs: [
	          { name:'Abi', field: 'abi', grouping: { groupPriority: 0 } },
	          { name:'Banca', field: 'banca'},
	          { name:'Numero mandati', field: 'numeroMandati'},
	          { name:'Stato', field: 'statoAllineamento'}
	        ],
	        data : $scope.records,
	        enableFiltering: true,
	        treeRowHeaderAlwaysVisible: false,
	        onRegisterApi: function( gridApi ) {
	            $scope.gridApi = gridApi;
	          }
	};
	
	$scope.reportTotali = function(ev) {
		utilsSvc.showForever('Generazione in corso...');
		DelegheSepa.Print({},$scope.filter).$promise.then(function(data){
				utilsSvc.downloadFile('application/pdf',data.response,'AggregazioneDelegheSeda.pdf');
				utilsSvc.cancelMessage();
			}, function(err){
				utilsSvc.cancelMessage();
				if (error.status == 404)
					utilsSvc.showForever('Messuna delega estratta');	
				else
					utilsSvc.handleHttpError(err);
			}).catch(function(err){
				if (err.status==404) {
					utilsSvc.cancelMessage();
					utilsSvc.showMessage('Nessuna delega estratta');
				} else 
					utilsSvc.handleHttpError(err);
			});		
	}
	
	$scope.exportXLS= function(ev) {
		utilsSvc.showForever('Generazione in corso...');
		DelegheSepa.Export({},$scope.filter).$promise.then(function(data){
				utilsSvc.downloadFile('attachment/csv',data.response,'ReportTotali.csv');
				utilsSvc.cancelMessage();
			}, function(err){
				utilsSvc.cancelMessage();
				if (error.status == 404)
					utilsSvc.showForever('Messuna delega estratta');
				else
					utilsSvc.handleHttpError(err);
			});
	}
	
	$scope.showCommands = function(index,$event) {
		$scope.selectedIndex = index;
	    $mdBottomSheet.show({
	      templateUrl: 'templates/bottom-sheet-template.html',
	      controller: 'comandiDelegheSepaCtrl',
	      idx: index,
	      appVariables: $scope.appVariables,
	      fromDisposizioni: $scope.fromDisposizioni,
	      targetEvent: $event,
	      parent:document.getElementById('dialogSeda')
	    }).then(function(selectedCommand) {
	      $scope.executeCommand(selectedCommand.cmdIndex, selectedCommand.recordIdx, $event);
	    }, 
	    	function(){}
	    );
	}

	$scope.executeCommand = function(cmdIndex, ndx, event) {
		if (cmdIndex==0)
			$scope.delegheSdd(ndx, event);
		else if (cmdIndex==1)
			$scope.delegheSeda(ndx, event);
		else if (cmdIndex==2)
			$scope.denominazioneBanca(ndx, event);
	}
	
	
	$scope.eseguiRicerca = function() {
		$scope.topPosition = 0;
		$scope.lastAbi = '';
		 $scope.records = [];
//		$scope.filteredView = !$scope.filteredView;
		if (!$scope.filteredView) {
			$scope.filter.aggregazioneABI=false;
			$scope.filter=$scope.defaultFilter;
		}
			
		$scope.getDeleghe();
	}
		
	$scope.denominazioneBanca = function(ndx,ev) { 
		Banche.GetByAbi({abi:$scope.records[ndx].abi.trim()}).$promise.then(function(data){
			var descrizioneBanca = data.descri;
		
	    	$mdDialog.show({
	    		targetEvent: ev,
	            templateUrl: 'templates/ricercaFiliali.html',
	            controller: 'ricercaFilialiCtrl',
	            locals: {abi: data.abi, istituto: descrizioneBanca},
	            multiple: true
	        }).then(function(filiale){
	        	// non cambiare le info
	        })
		});
    }
	
	$scope.getDeleghe = function() {
		if ($scope.ricercaInCorso)
			return;
		$scope.ricercaInCorso = true;
		utilsSvc.showForever('Ricerca in corso...');
		DelegheSepa.Count({}, ($scope.filteredView? $scope.filter: $scope.defaultFilter))
			.$promise.then(function(data){
				$scope.vistaAggregatoAbi = $scope.filter.aggregazioneABI;
				$scope.records=[];
				$scope.maxItems = data.value;
				$scope.infiniteItems.numLoaded_ = 0;
				$scope.infiniteItems.toLoad_ = 0;
				$scope.lastIndexToRetrieve = 0;
				
				if ($scope.filter.aggregazioneABI) {
					var listPromise = DelegheSepa.List({start: $scope.records.length,size:999999}, 
	      				($scope.filteredView? $scope.filter: $scope.defaultFilter)).$promise; 
	              	listPromise.then(
				              			function(data){
				              				$scope.ricercaInCorso = false;
				              				utilsSvc.cancelMessage();
				              				$scope.vistaAggregatoAbi = $scope.filter.aggregazioneABI;
				              				$scope.records = $scope.records.concat(data);
				              				$scope.gridOptions.data = data;
//				              				$scope.gridApi.grouping.clearGrouping();
//				              			    $scope.gridApi.grouping.groupColumn('Abi');
//				              			    $scope.gridApi.grouping.aggregateColumn('Banca', uiGridGroupingConstants.aggregation.COUNT);
//				              			    $scope.gridApi.treeBase.expandAllRows();
				              			},
				              			function(error) {
				              				$scope.ricercaInCorso = false;
				              				utilsSvc.cancelMessage();
				              				utilsSvc.handleHttpError(error);
				              			}
				              	)
	          					
				} else {
					$scope.ricercaInCorso = false;
					if (data.value==0) {
						utilsSvc.cancelMessage();
						utilsSvc.show('Nessuna disposizione collegata alla delega');
//						if ($scope.filteredView)
//							window.close();
					}
				}
				              	
			});
	}
	
	$scope.getDeleghe();
	
	$scope.cancelDialog = function() {
    	$mdDialog.cancel();
    }
	
	$scope.isEndAbiBlock=function(abi) {
		if ($scope.lastAbi!=abi) {
			$scope.lastAbi = abi;
			return true;
		} 
		return false;
			
	}
	

	$scope.delegheSdd = function(ndx, ev){
		var filtro = userService.newFilter();
		filtro.codiceClienteDebitore = $scope.records[ndx].codiceDestinatario;
		filtro.tipoChiamata = 'FiltroDisposizioniReadOnly';
		DisposizioniRid.Count(filtro,
				function(data){
					if (data.value>0) {
						localStorage.setItem("filter", JSON.stringify(filtro));
						$window.open('#/incassiSDD','_blank');
					}	
					else 
						utilsSvc.showMessage('Nessuna disposizione collegata alla delega');
				}
		);
		
	}
	
	$scope.delegheSeda = function(ndx, ev){
		var filtro = userService.newFilter();
		filtro.codiceClienteDebitore = $scope.records[ndx].codiceDestinatario;
		filtro.tipoChiamata = 'FiltroDisposizioniReadOnly';
		DisposizioniAea.Count(filtro,
				function(data){
					if (data.value>0) {
						localStorage.setItem("filter", JSON.stringify(filtro));
						$window.open('#/allineamentoSEDA','_blank');
					}	
					else 
						utilsSvc.showMessage('Nessuna disposizione collegata alla delega');
				}
		);
	}
	
	$scope.decodeTipoDestinatario = function(tipoDestinatario){
		var res ="";
		switch (tipoDestinatario) {
			case "1":
				return "Utenza";
			case "2":
				return "Matricola";
			case "3":
				return "Codice fiscale";
			case "4":
				return "Codice cliente";
			case "5":
				return "Codice fornitore";
			case "6":
				return "Portafoglio commerciale"
			case "9":
				return "Altri";
				
			default:
				return "Altri";
			
		}
	}
	
	$scope.decodeStato = function(stato) {
		switch (stato) {
		case "0":
			return "In attesa di esito";
		case "1":
			return "Attiva";
		case "2":
			return "Non attiva";
		case "6":
			return "Attivata SDD";
			
		}
	}
	
	$scope.infiniteItems = {
	          numLoaded_: 0,
	          toLoad_: 0,
	          loading_:false,
	          listPromise:null,
	          canceler: $q.defer(),
	          // Required.
	          getItemAtIndex: function(index) {
	        	  if ($scope.maxItems==0 ||  index>$scope.maxItems)
	        		  return null;
	        	  if (!$scope.infiniteItems.loading_)
	        		  if (index > $scope.records.length) {
	            	  		this.fetchMoreItems_(index);
	            	  		return null;
	        		  }
	            return $scope.records [index];
	          },
	          // Required.
	          // For infinite scroll behavior, we always return a slightly
				// higher
	          // number than the previously loaded items.
	          getLength: function() {
      		  return $scope.maxItems;
	        	  
	          },
	          fetchMoreItems_: function(index) {
	            if (this.toLoad_ < index) {

		            	this.toLoad_ += $scope.itemsPerPage;
		            	$scope.infiniteItems.loading_ = true;
		              	//this.listPromise = DelegheSepa.List({start: index,size:$scope.itemsPerPage},
		             this.listPromise = DelegheSepa.List({start: $scope.records.length,size:$scope.itemsPerPage}, //Math.max($scope.records.length+index,$scope.itemsPerPage)}, 
	      				($scope.filteredView? $scope.filter: $scope.defaultFilter)).$promise; 
		              var mod=this;
		              this.listPromise.then(
			              			function(data){
			              				$scope.infiniteItems.loading_ = false;
			              				utilsSvc.cancelMessage();
			              				$scope.vistaAggregatoAbi = $scope.filter.aggregazioneABI;
			              				$scope.records = $scope.records.concat(data);
			              				mod.numLoaded_ = $scope.records.length;
			              			},
			              			function(error) {
			              				$scope.infiniteItems.loading_ = false;
			              				utilsSvc.cancelMessage();
			              				utilsSvc.handleHttpError(error);
			              			}
			              	)
          	}
        }
	}	
	
})
.controller('comandiDelegheSepaCtrl', function($scope, $mdBottomSheet, idx, appVariables, fromDisposizioni) {

	$scope.title = 'Comandi';
	
	$scope.items = [
	    { id:0,  name: "SDD", icon: 'fa-folder-open', visible: true },
	    { id:1,  name: "Seda", icon: 'fa-folder-open',visible: true },
	    { id:2,  name: "Denom. Banca", icon: 'fa-bank',visible: true }
		];

	if (fromDisposizioni) {
		$scope.items[0].visible = false;
		$scope.items[1].visible = false;
	}
	
	  $scope.listItemClick = function($index, $event) {
	    var clickedItem = $scope.items[$index];
	    var result = {cmdIndex: $index, recordIdx: idx, event:$event}
	    $mdBottomSheet.hide(result);
	  };
	  
	  $scope.dismissBottomSheet = function() {
		  $mdBottomSheet.cancel();
	  }
	})