app.controller('opzioniPianoEstrazioneCtrl', 
function ($scope,$mdDialog,utilsSvc, PianoEstrazioneTipoFlusso, locals) {
	
	$scope.idPiano = locals.id;
	$scope.opzioni= [];
	$scope.opzioniEliminate=[];
	
	PianoEstrazioneTipoFlusso.List({id: $scope.idPiano})
		.$promise.then(function(data){
			$scope.opzioni = data;
		});
	
	$scope.nuovaOpzione = function(event){
		PianoEstrazioneTipoFlusso.New({id: $scope.idPiano})
			.$promise.then(function(data){
				$scope.opzioni.push(data);
				$scope.editOpzione($scope.opzioni.length-1,event);
			});	
	}
	
	$scope.editOpzione= function(index,ev) {
		$mdDialog.show({
    		targetEvent:ev,
            templateUrl: 'templates/opzionePianoEstrazione.html',
            controller: 'opzionePianoEstrazioneCtrl',
            locals: {opzione: $scope.opzioni[index], opzioni: $scope.opzioni, index: index},
            multiple: true
        }).then(function(opzione){
        	$scope.opzioni[index] = opzione;
        },function(err){
        	if ($scope.opzioni[index].id==null)
        		$scope.opzioni.splice(index,1);
        });
	}
	
	$scope.deleteOpzione = function(index,ev) {
		utilsSvc.showConfirm("Conferma","Confermi la cancellazione dell'opzione?")
			.then(function(res){
				if (res) {
					if ($scope.opzioni[index].id!=null && $scope.opzioni[index].id!=0)
						$scope.opzioniEliminate.push($scope.opzioni[index].id);
					$scope.opzioni.splice(index,1);
				} else {
					utilsSvc.showMessage('Cancellazione non effettuata');
				}
			})
	}

	$scope.decodeTipologia = function(value) {
		switch(value) {
		case 1: return "Suddivisione distinte per Banca Destinataria = Banca Ordinante e altre banche"; break;
		case 3: return "Indirizzamento flusso in uscita su altra Banca Ordinante"; break;
		case 2: return "Modifica prefisso flusso in uscita"; break;
		}
	}
	
	$scope.confirmDialog = function(index) {
		PianoEstrazioneTipoFlusso.Save({idPiano: $scope.idPiano}, {opzioni: $scope.opzioni, idCancellati:$scope.opzioniEliminate})
			.$promise.then(function(data){
				if (data) {
					utilsSvc.showMessage("Salvataggio modifiche effettuato");
					$mdDialog.hide();
				} else 
					utils.showMessage("Si è verificato un errore durante il salvataggio");
			});
	}
	
	$scope.cancelDialog = function() {
    	$mdDialog.cancel();
    }
})
.controller('opzionePianoEstrazioneCtrl',
function ($scope, $mdDialog, utilsSvc, locals) {
	$scope.opzione = angular.copy(locals.opzione);
	
	$scope.tipologiaValida = function() {
		var trovata=false;
		for(var i=0;i<locals.opzioni.length;i++){
			if (i!=locals.index)
				if (locals.opzioni[i].tipologiaEstrazione == $scope.opzione.tipologiaEstrazione)
					trovata = true;
		}
		return !trovata;
	}
	
	$scope.toUpperCase=function(event) {
		event.key = event.key.toUpperCase(); 
	}
	
	$scope.cancelDialog = function(ev){
		if ($scope.form.$dirty)
			utilsSvc.showConfirm('Conferma',"Confermi l'annullamento delle modifiche?",ev)
				.then(function(res){
					$mdDialog.cancel();
				});
		else
			$mdDialog.cancel();
	}
	
	$scope.confirmDialog = function(){
		if (!$scope.tipologiaValida()) {
			utilsSvc.showMessage('La tipologia è già stata usata');
			$scope.opzione.tipologiaEstrazione = "";
			return;
		}
		
		if ($scope.opzione.abiordinante==null || $scope.opzione.abiordinante.trim()=='') {
			utilsSvc.showMessage('Inserire il codice ABI ordinante per cui effettuare la funzione');
			return;
		}

		if ($scope.opzione.tipologiaEstrazione==1 && ($scope.opzione.valore!=null && $scope.opzione.valore.trim()!='')) {
			utilsSvc.showMessage('La funzione selezionata non richiede il valore di assegnazione');
			return;
		}

		if ($scope.opzione.tipologiaEstrazione!=1 && ($scope.opzione.valore==null || $scope.opzione.valore.trim()=='')) {
			utilsSvc.showMessage('La funzione selezionata richiede il valore di assegnazione');
			return;
		}

		$mdDialog.hide($scope.opzione);	
	}
	
	
})
;