app.controller('tipologieCtrl',
function($scope,$http,$cookies,$window, $location,$timeout, $mdDialog, $q, $routeParams, $mdBottomSheet, $mdMedia, Tipologie, utilsSvc) {

	var vm=this;
	
	vm.maxItems = 0;
	vm.itemsPerPage = 100;
	vm.selectedIndex=-1;
	vm.records=[];
	vm.filter={
		filterText: '',
		orderField:null
	}
	
	
	vm.setSelected=function(idx) {
		vm.selectedIndex = idx;
	}

	vm.columnWidths=[
			120,  //0
			380,  //1
			150, //2
			150 //3
		];
	
	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',
				'margin-left':'8px',
				'margin-right':'8px'
		};modalitaGenerazione
	}
	
	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()+96)+'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.getTipologie();
	}
	
	vm.editTipologia = function(idx, ev) {
		$mdDialog.show({
    		targetEvent:ev,
            templateUrl: 'templates/tipologia.html',
            controller: 'tipologiaCtrl',
            locals: {tipologia: vm.records[idx], descrizione: vm.decodeTipologia(vm.records[idx].tipologia), modalitaGenerazione:vm.decodeModalita(vm.records[idx].migeneraFlusso)},
            multiple: true
        }).then(function(res){
        	vm.records[idx] = res;
        	Tipologie.save({},res).$promise.then(
        		function(res){
        			vm.getTipologie();
        			utilsSvc.showMessage('Salvataggio modifiche effettuato');
        		},
        		function(err){
        			vm.getTipologie();
        			utilsSvc.handleHttpError(err);
        		}
			);
        },function(){
        	if(vm.records[idx].id==0 || vm.records[idx].id==null){
        		vm.records.splice(idx,1);
        	}
        });	

	}
	
	vm.decodeTipologia = function(tipologia) {
		return utilsSvc.decodeTipologia(tipologia);
	}
	
	vm.decodeModalita = function(tipologia,modalita) {
		if (tipologia==null || modalita==null)
			return;
		if (modalita)
			return "Automatica" + (tipologia.indexOf('INPS')<0?" e contestuale al processo di conversione":"");
		else 
			return "Manuale" + (tipologia.indexOf('INPS')<0?" e subordinata all'autorizzazione della distinta":"");
	}
	
	vm.decodeRichiestaEsitoSct = function(tipo){
		if (tipo=="3")
			return "Eseguito e stornato";
		return "";
	}
	
	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 (!vm.infiniteItems.loading_)
	        		  if (index > vm.records.length) {
	        			  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 (this.toLoad_ < index) {
	              this.toLoad_ += vm.itemsPerPage;
	              utilsSvc.showWaitMessage('Ricerca in corso...');
	              vm.infiniteItems.loading_ = true;
        		  this.listPromise = Tipologie.List({start: vm.records.length,size:Math.max(vm.records.length+index,vm.itemsPerPage)}).$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.getTipologie = function(){
		Tipologie.Count({filter:vm.filter.filterText}).$promise.then(
			function(data){
				vm.records=[];
				vm.maxItems = data.value;
				vm.infiniteItems.numLoaded_ = 0;
				vm.infiniteItems.toLoad_ = 0;
			
			}
		);
	}
	
	vm.init = function() {
		vm.getTipologie();
	}	
	
	vm.init();	
})

.controller("tipologiaCtrl",function($scope, $mdDialog, utilsSvc, locals){
	
	$scope.tipologia = angular.copy(locals.tipologia);
	 
	$scope.oraGen = "";
	
	if ($scope.tipologia.tipologia != 'SCT_INPS') {
		$scope.migeneraFlussoTrue = "Manuale e subordinata all'autorizzazione della distinta";
		$scope.migeneraFlussoFalse = "Automatica e contestuale al processo di conversione"
	} else {
		$scope.migeneraFlussoTrue = "Manuale";
		$scope.migeneraFlussoFalse = "Automatica"
		try{
			if ($scope.tipologia.oraGenerazioneFlusso!=null)
				$scope.oraGen = new Date($scope.tipologia.oraGenerazioneFlusso).getHours().toString().padZero(2,'0')+":"+new Date($scope.tipologia.oraGenerazioneFlusso).getMinutes().toString().padZero(2,'0');
			else
				$scope.oraGen = "";
		} catch(ex){
			$scope.oraGen = "";
		}
	}
	
	$scope.descrizione = locals.descrizione;
	$scope.modalitaGenerazione = locals.modalitaGenerazione;
	
	$scope.confirmDialog = function(){
				
		if (typeof $scope.tipologia.overrideTipoSequenzaRid=="undefined" )
			$scope.tipologia.overrideTipoSequenzaRid=null;
		
		if (typeof $scope.tipologia.overrideRichiestaEsitoSct=="undefined")
			$scope.tipologia.overrideRichiestaEsitoSct=null;
			
		if ($scope.tipologia.overrideTipoSequenzaRid!=null && $scope.tipologia.tipologia!='RID'){
			utilsSvc.show("Il Tipo Sequenza può essere impostato solo per la tipologia SDD");
			return;
		}
		
		if ($scope.tipologia.overrideRichiestaEsitoSct!=null && $scope.tipologia.tipologia!='BONIFICI'){
			utilsSvc.show("La forzatura della richiesta esito può essere impostata solo per la tipologia SCT");
			return;
		}
		
		if (document.getElementById('oraGenerazioneFlusso')!=null){
		
			var ora = document.getElementById('oraGenerazioneFlusso').value.split(":");
			if(ora.length==2){
				var newHour=new Date();
				newHour.setHours(ora[0]);
				newHour.setMinutes(ora[1]);
				$scope.tipologia.oraGenerazioneFlusso = newHour;
			} else
				$scope.tipologia.oraGenerazioneFlusso = null;
		}
		//$scope.tipologia.oraGenerazioneFlusso = $scope.oraGenerazioneFlusso;
				
		$mdDialog.hide($scope.tipologia);
	}
	
	$scope.cancelDialog=function(){
		$mdDialog.cancel();
	}
	
})

;