var uploader   = new UploaderEX("cargaFeesDiv"); // Se crear el objeto para
var datosSubir = null;						     // cargar archivos
var modificarPeriodo;
var indiceAnio;

var rentaPremiumController = function($scope, $filter, $q, rentaPremiumService, terminosService, minimosService, revenueService, releaseService, precioService) {

	$scope.tablaMinGar    = null;
	$scope.tablaMinAnio   = null;
	$scope.tablaRelease   = null;	
	$scope.tablaPrecios   = null;
	$scope.tablaRevenue   = null;
	
	$scope.tipoMin        = null;
	$scope.formatos       = null;
	$scope.idsCat         = null;
	$scope.idCatEli       = [];
	$scope.idsRel         = [0];
	$scope.idsRelEli      = [];
			
	terminosService.inicializarTablas("obtenerPremium").then(function(data) {		
		$scope.inicializar(data.data.premium);						
	});
		
	$scope.inicializar = function(data) {
						
		var res = minimosService.inicializarMinimos(data.minimos);
		$scope.tablaMinGar    = res.tablaMinGar;
		$scope.tablaMinAnio   = res.tablaMinAnio;
		$scope.tipoMin        = res.tipoMin;
		minimosService.inicializarDivMinimos($scope.tipoMin, "divMinCate", "divMinAnio");
		
		$scope.tablaRelease   = releaseService.crearTablaRelease(data.release, null, null);
		$scope.tablaPrecios   = precioService.crearTablaPrecios(data.precio, data.paises, null);
		
		$scope.formatos       = data.formatos;							
		$scope.tablaRevenue   = revenueService.crearTablaRevenue(data.revenue, [], null);						
	};
		
	$scope.inicializarDivsMinimos = function() {		
		minimosService.inicializarDivMinimos($scope.tipoMin, "divMinCate", "divMinAnio");	
	};

	$scope.editarTablaMinGarantizados = function(operacion, index, encabezado) {		
		var res = minimosService.editarTablaMinGarantizados(operacion, index, encabezado, $scope.tablaMinGar, $scope.idsCat, $scope.idCatEli);
		$scope.tablaMinGar  = res.tablaMinGar;
		$scope.idsCat       = res.idsCat;
		$scope.idCatEli     = res.idCatEli;			
	};

	$scope.editarTablaMinGarantizadosAnio = function(operacion, index, encabezado) {
		$scope.tablaMinAnio = minimosService.editarTablaMinGarantizadosAnio(operacion, index, encabezado, $scope.tablaMinAnio);		
	};

	$scope.editarTablaRelease = function(operacion, index) {						
		var res = releaseService.editarTablaRelease(operacion, index, $scope.tablaRelease,  $scope.tablaPrecios, $scope.tablaRevenue, $scope.idsRel, $scope.idsRelEli, $scope.formatos);
		$scope.tablaRelease = res.tablaRelease;  
		$scope.tablaPrecios = res.tablaPrecios;
		$scope.tablaRevenue = res.tablaRevenue;
		$scope.idsRel       = res.idsRel;
		$scope.idsRelEli	= res.idsRelEli;
	};
	
	$scope.actualizarMinCelda = function(fila, columna, valor, metadatos) {		
		var res = minimosService.actualizarMinCelda(fila, columna, valor, $scope.tipoMin, $scope.tablaMinAnio, $scope.tablaMinGar);		
		$scope.tablaMinAnio = res.tablaMinAnio;
		$scope.tablaMinGar  = res.tablaMinGar;	
	};

	$scope.actualizarReleaseCelda = function(fila, columna, valor, metadatos) {
		var res = releaseService.actualizarReleaseCelda(fila, columna, valor, $scope.tablaRelease, $scope.tablaRevenue, $scope.tablaPrecios);
		$scope.tablaRelease = res.tablaRelease;
		$scope.tablaRevenue = res.tablaRevenue; 
		$scope.tablaPrecios = res.tablaPrecios; 				
	};

	$scope.actualizarPrecioCelda = function(fila, columna, valor, metadatos) {		
		$scope.tablaPrecios = precioService.actualizarPrecioCelda(fila, columna, valor, $scope.tablaPrecios);				
	};
						
	$scope.actualizarRevenueCelda = function(fila, columna, valor, metadatos) {
		$scope.tablaRevenue.datos = revenueService.actualizarRevenueCelda(fila, columna, valor,$scope.tablaRevenue.datos);
	};
			
	$scope.guardar = function() {
		var continuar = true;
		var tablas = [];
				
		   continuar = minimosService.validarMinimos($scope.tablaMinAnio, $scope.tablaMinGar, $scope.tipoMin, "tabMinCat", "tabAnioMin");
		if(continuar)
		   continuar = releaseService.validarRelease($scope.tablaRelease);
		if(continuar)
		   continuar = revenueService.validarRevenue($scope.tablaRevenue);
		if(continuar)
		   continuar = precioService.validaPrecio($scope.tablaPrecios);				
		if(continuar)		
		   continuar = terminosService.validarTipoCambio();		
		
		if (continuar) 
		{			
			var minimosG = { idCatEli   : $scope.idCatEli, idCatMin : $scope.idsCat, 
					         aniosMin   : minimosService.obtenerMinAniosGuardar($scope.tipoMin, "tabMinCat", "tabAnioMin"),			
					         minimos    : terminosService.crearMatriz($scope.tablaMinGar), 
					         minimosAnio: terminosService.crearMatriz($scope.tablaMinAnio),
					         tipoMin    : $scope.tipoMin
					        }
			
			var terminos = rentaPremiumService.generaObjeto(minimosG, $scope.tablaRelease, $scope.tablaPrecios, $scope.tablaRevenue, null, null);																					
			var data     = { "premium" : terminos, idContrato: $("#idCto").val() };
			
			
			terminosService.guardar(data, "guardarPremium").then(function(data) {				    
					if (data.error != null)
						showError(data.error);
					else
					{
						showMessage("Se han guardado los datos de la seccion Premium.");
						terminosService.inicializarTablas("obtenerPremium").then(function(data) {							
							$scope.inicializar(data.data.premium);						
						});																		
					}
            });
			
		}
	};
												
	//funciones para importar exceles					
	$scope.cargarDatos = function() {
		uploader.startUpload("modalCarga");
	};
	
	$scope.verificarDatos = function() {
		$('#modalImportarArchivo').modal('hide');
		if (datosSubir != null && datosSubir.datosMatriz != null) 
		{			
			if(uploader.tipoFees == "premium" && uploader.operacion == "minimos")			
			   this.importarMinimos(datosSubir.datosMatriz);
			if(uploader.tipoFees == "premium" && uploader.operacion == "release")
			   this.importarRelease(datosSubir.datosMatriz);
			if(uploader.tipoFees == "premium" && uploader.operacion == "precio")
			   this.importarPrecio(datosSubir.datosMatriz);						
		}
	};
	
	$scope.abrirModalMinimos = function() {		
		terminosService.generaVarCarga("cargaFeesDiv", "premium", "minimos", "");				
	};
	
	$scope.importarMinimos = function(data) {				
		var res = minimosService.importarExcelMin(data, $scope.tablaMinGar, $scope.idsCat, $scope.idCatEli);
		$scope.tablaMinGar = res.tablaMinGar;
		$scope.idsCat      = res.idsCat;		
	};
							
	$scope.abrirModalRelease = function() {
		terminosService.generaVarCarga("cargaFeesDiv", "premium", "release", "");				
	};
	
	$scope.importarRelease = function(data) {		        
		var res = releaseService.importarExcelRelease(data, $scope.tablaRelease, $scope.tablaPrecios, $scope.tablaRevenue, $scope.idsRel, $scope.idsRelEli, $scope.formatos);				
		$scope.tablaRelease = res.tablaRelease;  
		$scope.tablaPrecios = res.tablaPrecios;
		$scope.tablaRevenue = res.tablaRevenue;
		$scope.idsRel       = res.idsRel;
		$scope.idsRelEli	= res.idsRelEli;		
	};
	
	$scope.abrirModalPrecio = function() {
		terminosService.generaVarCarga("cargaFeesDiv", "premium", "precio", "");		
	};
	
	$scope.importarPrecio = function(data) {		
		$scope.tablaPrecios = precioService.importarExcelPrecio(data, $scope.tablaPrecios);			
	};														
			
	//funcion para exportar excel
	$scope.exportarExcel = function(seccion, operacion, datos, encabezados) {
		var enc = [];					   			
		datos   = terminosService.crearMatriz(datos);				
		
		if(operacion == "min_cat" || operacion == "min_anio")
		   enc = minimosService.obtenerEncabezadosExportar(operacion, encabezados, "tabAnioMin");				
		else if(operacion == "release")		
		   enc = releaseService.obtenerEncabezadosExportar();		   			
		else if(operacion == "precio")
		{			
			var res = precioService.obtenerEncabezadosExportar(datos, encabezados);
		    enc = res.encabezados;
		    datos = res.datos;
		}		   					    			
		terminosService.descargarArchivo(seccion, operacion, $("#idCto").val(), datos, enc).then(function(data) {  });				
	};
	
	$scope.setColspan = function(x) {
		return x.colspan;
	};
		
	$scope.modificarFechasAnioMinimos = function(indice, evento) {		
		var fecha;
		if($scope.tipoMin == "categoria")
		   fecha = evento.srcElement.textContent;
		else if($scope.tipoMin == "anio")
		  fecha = evento.srcElement.value;
				
		var cadenas = fecha.split("-");		
		$("#fechaPerInicio").val(cadenas[0]);
		$("#fechaPerFin")   .val(cadenas[1]);
		$("#modificarPeriodo").modal("show");
		modificarPeriodo = true;
		indiceAnio       = indice;
	};
	
	$scope.actualizarFechasMinimos = function() {		
		var fecha = $("#fechaPerInicio").val() + "-" + $("#fechaPerFin").val();			
		if($scope.tipoMin == "categoria")		
		   $("#tabMinCat").find("thead tr").find("th:nth-child(" + (indiceAnio + 1) + ")").text(fecha);				
		else if($scope.tipoMin == "anio")							
			$scope.tablaMinAnio.datos[indiceAnio][0].valor = fecha;									
		$("#modificarPeriodo").modal("hide");
	};
	
	$scope.agregarPeriodos = function() {		
		$("#chInflacion").prop('checked', false)
		$("#perNuevo").prop('checked', false)
		$("#perAnt").prop('checked', false)
	    $("#fechaAgInicio").val('');
		$("#fechaAgFin").val('');		
		$("#agregarPeriodo").modal('show');						
	};

	$scope.agregarNuevoPeriodo = function() {		
		if($("#fechaAgInicio").val() == "" || $("#fechaAgFin").val() == "")		
		   $("#labErroAgPer").text("No se han ingresado las fechas del periodo").show();		
		else
		{						
			if($scope.tipoMin == "categoria")			
			   $scope.tablaMinGar  = minimosService.agregarPeriodoCategoria($scope.tablaMinGar, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");								
			else			
			   $scope.tablaMinAnio = minimosService.agregarPeriodoAnio($scope.tablaMinAnio, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");													
			$("#agregarPeriodo").modal("hide");	
		}			
	};				
};

registraController("rentaPremiumController", rentaPremiumController);