app.controller('acquisizioneFlussiCtrl',
	
function ($scope,$http,$cookies,$window, $location,$timeout, $mdDialog, $q, $routeParams, $mdBottomSheet, $mdMedia, utilsSvc, userService, DistintaFlussiInput, UserManager) {
	
	var vm=this;
	
	vm.maxItems = 0;
	vm.itemsPerPage = 100;
	vm.selectedIndex=-1;
	vm.records=[];
	vm.filter={
		orderField:null
	};
	
	vm.setSelected=function(idx) {
		vm.selectedIndex = idx;
	}
	
	vm.columnWidths=[
			70,  //0
			150,  //1
			110, //2
			90, //3
			90,  //4
			100, //5
			150, //6
			380, //7
			100,  //8
			150 //9
		];
	
	vm.getGridItemHeight = function() {
		return utilsSvc.getGridHeight();
	}


	vm.apriFlusso = function(distinta) {
		if (distinta.tipologia=='RID') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaFlusso = distinta.iddistintaFlusso;
			filtro.tipoChiamata = 'DistinteFlussiInput';
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/incassiSDD');
		} else if (distinta.tipologia=='AEA') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaFlusso = distinta.iddistintaFlusso;
			filtro.tipoChiamata = 'DistinteFlussiInput';
			userService.setFiltroIncassiSRfettDD(filtro);
			$location.path('/allineamentoSEDA');
		} else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='BONIFICI') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaFlusso = distinta.iddistintaFlusso;
			filtro.tipoChiamata = 'DistinteFlussiInput';
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiSCT');
		} else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='DOM') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaFlusso = distinta.iddistintaFlusso;
			filtro.tipoChiamata = 'DistinteFlussiInput';
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiDOM');
		} else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='BONIFICI_INTERNI') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaFlusso = distinta.iddistintaFlusso;
			filtro.tipoChiamata = 'DistinteFlussiInput';
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiSCT');
		}else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='BONIFICI_INPS') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaFlusso = distinta.iddistintaFlusso;
			filtro.tipoChiamata = 'DistinteFlussiInput';
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiSCTInps');
		}  else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='SCT_ESTERI') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaFlusso = distinta.iddistintaFlusso;
			filtro.tipoChiamata = 'DistinteFlussiInput';
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiSCT_ESTERI');
		} else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='ASSEGNI_INTESA') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaFlusso = distinta.iddistintaFlusso;
			filtro.tipoChiamata = 'DistinteFlussiInput';
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/AssegniIntesa');
		}
	}
	
	vm.annullaFlusso = function(distinta) {
		utilsSvc.showConfirm("Conferma","Confermi l'annullamento del flusso?")
			.then(function(res){
				DistintaFlussiInput.Annulla({id: distinta.id})
					.$promise.then(function(data){
						if (data.value=="0")
							utilsSvc.showMessage("Annullamento flusso effettuato.");
						else if (data.value=="1")
							utilsSvc.showMessage("Il flusso in oggetto contiene disposizioni con stato modificato o già estratte in distinte banca, annullamento flusso non effettuabile");
						else if (data.value=="4")
							utilsSvc.showMessage("Un altro utente ha effettuato delle modifiche sul flusso, annullamento flusso non effettuabile");
						else if (data.value=="5")
							utilsSvc.showMessage("Un altro utente ha eliminato il flusso, annullamento flusso non effettuabile");
							;
						vm.getFlussi();
					},function() {
						vm.getFlussi();
					})
					
			})
		
	}
	
	vm.stampaLogStatiFlusso=function() {
		utilsSvc.showForever('Generazione in corso...');
		DistintaFlussiInput.Print({},vm.filter).$promise.then(function(data){
			utilsSvc.downloadFile('application/pdf',data.response,'LogFlussiInput.pdf');
			utilsSvc.cancelMessage();
		});		
	}
	
	vm.showCommands = function(distinta,index,$event) {
		vm.selectedIndex = index;
	    $mdBottomSheet.show({
	      templateUrl: 'templates/bottom-sheet-template.html',
	      controller: 'comandiAcquisizioneFlussiCtrl',
	      distinta: distinta,
	      idx: index,
	      appVariables: vm.appVariables,
	      targetEvent: $event
	    }).then(function(selectedCommand) {
	      vm.executeCommand(selectedCommand.cmdIndex, selectedCommand.recordIdx, $event);
	    }, 
    	function(){}
	    );
	}
	
	vm.logStatiDistinta = function(distinta,event) {
		DistintaFlussiInput.LogStati({id: distinta.iddistintaFlusso})
		.$promise.then(function(data){
			if (data.length==0) {
				utilsSvc.showMessage("Nessuno stato presente");
			} else {
				vm.showLog(data, "Log stati flusso " +distinta.iddistintaFlusso, event);
			}
		})		
	}

	vm.showLog = function(log, title, event) {
		$mdDialog.show({
            templateUrl: 'templates/logStati.html',
            controller: 'logStatiCtrl',
            targetEvent: event,
            locals: {log:log, dialogTitle: title},
            multiple: true
        })

    }
	

	
	vm.executeCommand = function(id,idx, $event) {
		switch(id) {
			case 0: vm.apriFlusso(vm.records[idx], $event); break;
			case 1: vm.annullaFlusso(vm.records[idx], $event); break;
			case 2: vm.logStatiDistinta(vm.records[idx], $event); break;
		}
	}
	
	vm.getListHeight = function() {
		containerHeight = ($window.innerHeight - $('#container').position().top - $('#view').position().top);
		  return {'height':  containerHeight + 'px'};
	};
	$window.addEventListener('resize', onResize);
	function onResize() {
	  $scope.$digest();
	}
	$scope.$on('$destroy', function() {
	  $window.removeEventListener('resize', onResize);
	});
	
	
	vm.getColumnWidth = //	              }
		//        this.lastStartIdx = index;
		function(idx) {
		return {
				'width': vm.columnWidths[idx] + 'px', 
				'min-width':vm.columnWidths[idx] + 'px',
				//'padding-left':'6px',
				//'padding-right':'6px',
				'margin-left':'8px',
				'margin-right':'8px'
		};
	}
	
	vm.getMaxListWidth = function() {
		var res=0;
		for (var i=0;i<vm.columnWidths.length;i++)
			res += vm.columnWidths[i]+6+8+10;
		
		$('#container').css('width',($('#header').width()+10)+'px');
		return {'width': res+ 'px!important;'}
	}
	
	vm.setOrderField = function(field) {
		if (vm.filter.orderField!=field)
			vm.filter.orderField = field;
		else
			vm.filter.orderField = "-" +field;
		
		vm.getFlussi();
	}

	
	
	vm.infiniteItems = {
	          numLoaded_: 0,
	          toLoad_: 0,
	          loading_:false,
	          lastStartIdx:-1,
	          listPromise:null,
	          canceler: $q.defer(),
	          // Required.
	          getItemAtIndex: function(index) {
	        	  if (vm.maxItems==0 || index>vm.maxItems)
	        		  return null;
	        		 if (index > vm.records.length) 
	    	        	 if (!vm.infiniteItems.loading_) {
	    	        		 this.fetchMoreItems_(index);
	        			 	return null;
	    	        	 }
	            return vm.records [index];
	          },
	          // Required.
	          // For infinite scroll behavior, we always return a slightly
				// higher
	          // number than the previously loaded items.
	          getLength: function() {
        		  return vm.maxItems;
	        	  
	          },
	          fetchMoreItems_: function(index) {
	            if (vm.infiniteItems.toLoad_ < index) {
	            	vm.infiniteItems.toLoad_ += vm.itemsPerPage;
	              utilsSvc.showWaitMessage('Ricerca in corso...');
	              vm.infiniteItems.loading_ = true;
	              
        		  this.listPromise = DistintaFlussiInput.List({start: vm.records.length,size:Math.max(vm.records.length+index,vm.itemsPerPage),orderBy:vm.filter.orderField}).$promise;
		              
	              var mod=this;
		              this.listPromise.then(
			              			function(data){
										vm.infiniteItems.loading_ = false;
										vm.infiniteItems.toLoad_=0;
			              				utilsSvc.cancelWaitMessage();
			              				vm.records = vm.records.concat(data);
			              				mod.numLoaded_ = vm.records.length;
			              				mod.lastStartIdx = vm.records.length;
			              			},
			              			function(error) {
										vm.infiniteItems.loading_ = false;
										vm.infiniteItems.toLoad_=0;
			              				utilsSvc.handleHttpError(error);
			              			}
			              	)
            	}
          }
	}	

	

	vm.getFlussi = function(){
		DistintaFlussiInput.Count({}).$promise.then(
					function(data){
						vm.records=[];
						vm.maxItems = data.value;
						vm.infiniteItems.numLoaded_ = 0;
						vm.infiniteItems.toLoad_ = 0;
					
					}
				);
	}
	
	
	vm.init = function() {
		vm.getFlussi();
		UserManager.AppVariables().$promise.then(function(data) {
			vm.appVariables = data;
		});

	}	
	
	vm.decodeFlusso=function(codFlusso){
		if (codFlusso=='R1'|| codFlusso=='R2' || codFlusso=='R3' || codFlusso=='R4')
			return 'CBI';
		else if (codFlusso=='R5' || codFlusso=='R9')
			return 'TEXT CUSTOM'
		else if (codFlusso=='R6')
			return 'XML PLAIN'
		else if (codFlusso=='R7' || codFlusso=='R8')
			return 'EXCEL'
		else if (codFlusso=='RI')
			return 'XML 20022'
		else 
			return codFlusso;
	}
	
	
	
	vm.init();

}
)

.controller('comandiAcquisizioneFlussiCtrl', function($scope, $mdBottomSheet, utilsSvc, distinta, idx, appVariables) {

	$scope.title = 'Comandi';
	
	$scope.items = [
	    { id:0,  name: "Apri distinta", icon: 'fa-folder-open',visible: true },
	    { id:1,  name: "Annulla distinta", icon: 'fa-exclamation-triangle', visible: true },
	    { id:2,  name: "Log stati distinta", icon: 'fa-file-text-o', visible: true }
		];
	
		if (distinta.statoDistinta == "Elaborato") {
			if (distinta.tipoFlusso!='R1' && distinta.tipoFlusso!='R3' && distinta.tipoFlusso!='R4' && distinta.tipoFlusso!='R5')
				$scope.items[1].visible = false;
		} else
			$scope.items[1].visible = false;
			
		if (appVariables.profiloLocale=='VI')
			$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();
	  }
	  
	  $scope.smallScreen = function() {
		  return utilsSvc.smallScreen();
	  }
	  
	  $scope.listClass = function(){
		  if (utilsSvc.smallScreen())
			  return 'md-list';
		  else
			  return 'md-grid';
	  }
})
;	  
	