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

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

	$scope.tablaMinGar     = null;
	$scope.tablaMinAnio    = null;	
	$scope.tipoMin         = null;
	
	$scope.tablaPrecios    = {datos:null};	
	
	$scope.tablaRevenueLib     = null;
	$scope.tablaRevenueBoxLib  = null;
	$scope.tipoRevenue         = null;
	
	$scope.formatos           = ["sd", "hd", "ed"];
	$scope.paises             = ["Brasil"];
	$scope.categorias         = ["tier 1", "tier 2"];
	$scope.categoriasAgregar  = [{categoria: "tier 1", valor: "tier 1", formato: "sd", agregada: 'false'}, 
			                     {categoria: "tier 1", valor: "tier 1", formato: "hd", agregada: 'false'},
			                     {categoria: "tier 1", valor: "tier 1", formato: "3d", agregada: 'false'},
			                     {categoria: "tier 2", valor: "tier 2", formato: "sd", agregada: 'false'},
			                     {categoria: "tier 2", valor: "tier 2", formato: "hd", agregada: 'false'},
			                     {categoria: "tier 2", valor: "tier 2", formato: "3d", agregada: 'true'}
			                     ];
		
	$scope.inicializar = function(data) {
		
						 
	};
	
	$scope.guardar = function() {
		var continuar = true;
		var tablas = [];
				
		   continuar = minimosService.validarMinimos($scope.tablaMinAnioPre, $scope.tablaMinGar, $scope.tipoMin, "tabMinCatPre", "tabAnioMinPre");		
		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, "tabMinCatPre", "tabAnioMinPre"),			
					         minimos    : terminosService.crearMatriz($scope.tablaMinGar), 
					         minimosAnio: terminosService.crearMatriz($scope.tablaMinAnioPre),
					         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, "guardarPremier").then(function(data) {
					if (data.error != null)
						showError(data.error);
					else
					{
						showMessage("Se han guardado los datos de la seccion Premier.");
						terminosService.inicializarTablas("obtenerPremier").then(function(data) {							
							$scope.inicializar(data.data.premium);						
						});
					}
            });
			
		}
	};
	
	//Funciones para la tabla precio
	$scope.actualizarPrecioCelda = function(fila, columna, valor) {		
		debugger
		$scope.tablaPrecios = precioService.actualizarPrecioCelda(fila, columna, valor, $scope.tablaPrecios);    				
	};
	
	$scope.abrirAgregarCategorias = function() {		
		this.ajustarCategoriasAgregar();		
		$("#agregarCategoriaMovies").modal("show");						 
	};
	
	$scope.ajustarCategoriasAgregar = function() {		
		var cate = "";
		for(var i=0; i<$scope.categoriasAgregar.length; i++)
		{
			if(cate != $scope.categoriasAgregar[i].categoria)
			{
				cate = $scope.categoriasAgregar[i].categoria;
			}
			else
				$scope.categoriasAgregar[i].categoria = null;
		}										
	};
	
	$scope.ajustarDatosPrecio = function(datos) {		
		var cate = "";
		for(var i=0; i<datos.length; i++)
		{
			if(cate != datos[i][0])
			{
				cate = datos[i][0];
			}
			else
				datos[i][0] = null;
		}										
	};
	
	$scope.ajustarTablasPrecio = function(data) {				
						
		
		if(data.datos == null || data.datos.length == 0)
		{
			var datos = [];
			for(var i=0; i<$scope.categoriasAgregar.length;i++)
			{				
				if( $scope.categoriasAgregar[i].agregada == "true")
				{
					var fila = [];				
					fila.push($scope.categoriasAgregar[i].valor);
					fila.push($scope.categoriasAgregar[i].formato);
					for(var j=0; j<$scope.paises.length;j++)
					{
						fila.push(null);
						fila.push(null);
					}
					datos.push(fila);
				}								
			}			
			this.ajustarDatosPrecio(datos);
			$scope.tablaPrecios = precioService.crearTablaPrecios(datos, $scope.paises, null);
			
		}
		else
		{
			var temp  = $scope.tablaPrecios.datos;
			var datos = [];
			for(var i=0; i<$scope.categoriasAgregar.length;i++)
			{	
				if( $scope.categoriasAgregar[i].agregada == "true")
				{
					var fila = [];
					var encontrado = false;
					fila.push($scope.categoriasAgregar[i].valor);
					fila.push($scope.categoriasAgregar[i].formato);
					
					for(var j=0; j<temp.length;j++)
					{
						if( temp[j][0].valor == $scope.categoriasAgregar[i].valor && temp[j][1].valor == $scope.categoriasAgregar[i].formato)
						{
							encontrado = true;
							
							for(var k=0; k < temp[j].length;k++)
							{
								
								if(temp[j][k].valor == null)
						    	   fila.push(null);
						    	 else if(k>1)
						    	   fila.push($filter('numDigMoneda')(temp[j][k].valor, 4));
							}
						}
					}
					
					if(!encontrado)
					{
						for(var j=0; j<$scope.paises.length;j++)
						{
							fila.push(null);
							fila.push(null);
						}	
					}
					
					datos.push(fila);					
				}									
			}
			this.ajustarDatosPrecio(datos);
			$scope.tablaPrecios = precioService.crearTablaPrecios(datos, $scope.paises, null);
		}
		$("#agregarCategoriaMovies").modal("hide");
	};
		 
	$scope.guardar = function() {
		var continuar = true;
		var tablas = [];
					
		   continuar = minimosService.validarMinimos($scope.tablaMinAnio, $scope.tablaMinGar, $scope.tipoMin, "tabMinCatLib", "tabAnioMinLib");
		
		if(continuar)
		   continuar = revenueService.validarRevenueBoxGlobal($scope.tipoRevenue , $scope.tablaRevenueLib, $scope.tablaRevenueBoxLib);
		
		if(continuar)		
			continuar = precioService.validaPrecioLib($scope.tablaPreciosLib);
		   						
		if(continuar)		
		   continuar = terminosService.validarTipoCambio();		
		
		if(continuar)
		{
			if($scope.tipoRevenue == "box" && $scope.tipoMin == "anio")
			{
				showError("No se puede tener revenue box con minimos por periodo.")
			    continuar = false;
			}			  
		}
		
		if (continuar) 
		{										
			var minimosG = {    anios   : minimosService.obtenerMinAniosGuardar($scope.tipoMin, "tabMinCatLib", "tabAnioMinLib"),			
					         minimosCa  : terminosService.crearMatriz($scope.tablaMinGar), 
					         minimosAn  : terminosService.crearMatriz($scope.tablaMinAnio),
					         tipoMin    : $scope.tipoMin
					        }
																
			var revenue  = { revenueGlobal: $scope.tipoRevenue == "global" ? true:false,
					         revenueBox   : $scope.tipoRevenue == "box" ? true:false, 
					         revenue      : terminosService.crearMatriz($scope.tablaRevenueLib), 
					         revenueB     : terminosService.crearMatriz($scope.tablaRevenueBoxLib)
					       };			
		
			var comun  =  {
							 tipoCambio  : $("#tipoCambio").val(),
							 inflacion   : $("#inflacionTx").val(),
							 fechaInicio : null,
							 fechaFin	 : null						
						  }
			
			var libreria = { revenue : revenue, minimos : minimosG, precio : terminosService.crearMatriz($scope.tablaPreciosLib), comun: comun };
						
																									
			var data     = { "libreria" : libreria, idContrato: $("#idCto").val() };
			
			
			terminosService.guardar(data, "guardarLibreria").then(function(data) {				   	    
					if (data.error != null)
						showError(data.error);
					else
					{
						showMessage("Se han guardado los datos de la seccion Libreria.");
						terminosService.inicializarTablas("obtenerLibreria").then(function(data) {							
							$scope.inicializar(data.data.libreria);						
						});
					}
            });

		}
	};

	//funciones para importar exceles					
	$scope.cargarDatos = function() {
		uploader.startUpload("modalCarga");
	};
	
	$scope.verificarDatos = function() {
		$('#modalImportarArchivoMov').modal('hide');
		if (datosSubir != null && datosSubir.datosMatriz != null) 
		{			
			if(uploader.tipoFees == "movies" && uploader.operacion == "minimos")			
			   this.importarMinimos(datosSubir.datosMatriz);			
			if(uploader.tipoFees == "movies" && uploader.operacion == "precio")
			   this.importarPrecio(datosSubir.datosMatriz);						
		}
	};
	
	$scope.abrirModalMinimos = function() {		
		terminosService.generaVarCarga("cargaFeesDivMov", "movies", "minimos", "Mov");				
	};
	
	$scope.importarMinimos = function(data) {				
		var res = minimosService.importarExcelMin(data, $scope.tablaMinGar, $scope.idsCat, $scope.idCatEli);
		$scope.tablaMinGar = res.tablaMinGar;
		$scope.idsCat      = res.idsCat;		
		this.actualizarBox();
	};
								
	$scope.abrirModalPrecio = function() {		
		terminosService.generaVarCarga("cargaFeesDivMov", "movies", "precio", "Mov");		
	};
	
	$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, "tabAnioMinPre");								   			
		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("-");		
		$("#fechaPerInicioLib").val(cadenas[0]);
		$("#fechaPerFinLib")   .val(cadenas[1]);
		$("#modificarPeriodoLib").modal("show");
		modificarPeriodo = true;
		indiceAnio       = indice;
	};
	
	$scope.actualizarFechasMinimos = function() {						
		var fecha = $("#fechaPerInicioLib").val() + "-" + $("#fechaPerFinLib").val();			
		if($scope.tipoMin == "categoria")		
		   $("#tabMinCatLib").find("thead tr").find("th:nth-child(" + (indiceAnio + 1) + ")").text(fecha);				
		else if($scope.tipoMin == "anio")							
			$scope.tablaMinAnio.datos[indiceAnio][0].valor = fecha;									
		$("#modificarPeriodoLib").modal("hide");
	};
	
	$scope.agregarPeriodos = function() {		
		$("#chInflacionLib").prop('checked', false)
		$("#perNuevoLib").prop('checked', false)
		$("#perAntLib").prop('checked', false)
	    $("#fechaAgInicioLib").val('');
		$("#fechaAgFinLib").val('');		
		$("#agregarPeriodoLib").modal('show');						
	};

	$scope.agregarNuevoPeriodo = function() {		
		if($("#fechaAgInicioLib").val() == "" || $("#fechaAgFinLib").val() == "")		
		   $("#labErroAgLib").text("No se han ingresado las fechas del periodo").show();		
		else
		{						
			if($scope.tipoMin == "categoria")			
			   $scope.tablaMinGar  = minimosService.agregarPeriodoCategoria($scope.tablaMinGar, "fechaAgInicioLib", "fechaAgFinLib", "perAntLib", "perNuevoLib");								
			else			
			   $scope.tablaMinAnio = minimosService.agregarPeriodoAnio($scope.tablaMinAnio, "fechaAgInicioLib", "fechaAgFinLib", "perAntLib", "perNuevoLib");													
			$("#agregarPeriodoLib").modal("hide");	
		}			
	};				
};

registraController("ventaMoviesController", ventaMoviesController);