
jQuery(function ($) {

	initRupI18nPromise.then(function () {
		initFilter();
		initTable();
		initDialog();
	});

	const initFilter = () => {
		$.rup_date({
			yearRange: 'c-100:c+100',
			from: "fRegistro14_filter_table_from",
			to: "fRegistro14_filter_table_to",
			mask: 'dd/mm/yyyy',
			showButtonPanel: true,
			showOtherMonths: true,
			noWeekend: true
		});

		// Combos del filtro
		Ad74aUtils.configCombo($("#submisiontype14_filter_table"), {
			loadFromSelect: true
		});
		
		Ad74aUtils.configCombo($("#procedureid14_filter_table"), {
			loadFromSelect: true
		});
		
		// Añadir el option todos los errores
		$("#errorExpediente00_filter_table option:last").after(`<option value='0'>${$.rup.i18n.app.combos.todos}</option>`);
		Ad74aUtils.configCombo($("#errorExpediente00_filter_table"), {
			loadFromSelect: true
		});		
		
		// Borrar los hidden generados con el <form:checkbox/>
		$("input[name='_expediente.urgencia00']").remove();
		
	}

	const initTable = () => {
		const getColumnsModel = function () {
			const getColumnModel = function (name, index, editable, hidden, orderable) {
				return {
					name: name,
					index: index,
					editable: editable,
					hidden: hidden,
					orderable: orderable
					
				}
			};
			let columnsModel = [];
			columnsModel.push(getColumnModel("expediente.urgencia00", "urgencia00", false, false, false));
			columnsModel.push(getColumnModel("folderid14", "folderid14", false, false));
			columnsModel.push(getColumnModel("procedureid14_desc", "procedureid14_desc", false, false));
			columnsModel.push(getColumnModel("fRegistro14", "fRegistro14", false, false));
			columnsModel.push(getColumnModel("numRegistro14", "numRegistro14", false, false));
			columnsModel.push(getColumnModel("submisiontype14_desc", "submisiontype14_desc", false, false));
			columnsModel.push(getColumnModel("solicitante.idSolicitante01", "idSolicitante01", false, false));
			return columnsModel;
		};
 
		const getColumnsDefs = function () {
			return [
				{ 
					"targets": 0,
					"className": "icons-column",
					"render": function(data, type, row, settings){						
						let iconUrgencia = "";
						if( row.expediente.urgencia00 == 1 ){
							iconUrgencia = `
								<span class="mdi mdi-clock-fast naranja sol_urgente_icon " 
									style="float: right;">
								</span>
							`;
						}
						let iconError = "";
						if( row.expediente.errorExpediente00 != 0 ){
							iconError = `
								<span class="mdi mdi-alert-outline rojo sol_error_icon" 
									style="float: right;" msg='${row.expediente.errorExpediente00_desc}'>
								</span>
							`;
						}
						return iconError + iconUrgencia;									
					}
				},
				{
					"targets": 5,
					"render": function(data, type, row, settings){
						if ( row.expediente.numExpediente00 != null ) {						 
							const url = '../expedientes/detail/' + row.expediente.idExpediente00;
							return `<a href='javascript:window.open("${url}", "exp_${row.expediente.idExpediente00}");'>${row.expediente.numExpediente00}</a>`;						
						}						
						return "";
					}
				},
				{
					"targets": 6,
					"render": function(data, type, row, settings){
						const url = "../solicitantes/detail/" + row.solicitante.idSolicitante01; 
						const nombre = `${row.solicitante.nombre01 || ''} ${row.solicitante.apellido101 || ''} ${row.solicitante.apellido201 || ''}`.trim();
						if(row.solicitante.beneficiario01 == beneficiario01BeneficiarioVal){
							return `<a href='javascript:window.open("${url}", "persona_${row.solicitante.idSolicitante01}");'>
			        		${row.solicitante.identificador01? row.solicitante.identificador01 + ' - ' : '' } 
			        		${nombre}
			        	</a>`;		
						}else{
							return `${row.solicitante.identificador01? row.solicitante.identificador01 + ' - ' : '' } 
			        		${nombre}`;		
						}
			        					
					},
					"orderable": false
				}
			];
		};

		const getCustomButtons = function () {
			let customButons = [];
			
			const FN_ProcesarDisplay = {};
			FN_ProcesarDisplay.test  = function(){
				const selectedRows  = $("#bandejatelematica").rup_table("getSelectedRows");	
				// 1 seleccionado y no tiene error en el expediente
				if ( selectedRows.length == undefined && selectedRows.expediente.errorExpediente00 == 0 ) {
					return true;
				}
				return false;
			};
			const procesarButton = {
				text: function () {
					return $.rup.i18n.app.botonera.procesar;
				},
				id: 'procesar', // Campo obligatorio si se quiere usar desde el contextMenu
				className: 'btn-material-primary-high-emphasis table_toolbar_btnView',
				icon: "mdi-settings",
				displayRegex: FN_ProcesarDisplay,
				insideContextMenu: true,
				//type: 'view',
				action: function (e, dt) {
					openDialogBandejaTelematica();
				}
			};
			customButons.push(procesarButton);
			
			return customButons;
		};



		$("#bandejatelematica").rup_table({
			colReorder: {
				fixedColumnsLeft: 1
			},
			colModel: getColumnsModel(),
			columnDefs: getColumnsDefs(),
			primaryKey: "idEntrada14",
			filter: {
				id: "bandejatelematica_filter_form",
				filterToolbar: "bandejatelematica_filter_toolbar",
				collapsableLayerId: "bandejatelematica_filter_fieldset"
			},
			createTooltipBody: false,// No muestra el tooltip automático de las columnas de la tabla
			select: {
				activate: true
			},
			buttons: {
				activate: true,
				blackListButtons: ['reportsButton', 'addButton', 'editButton', 'cloneButton', 'deleteButton'],
				myButtons: getCustomButtons()
			},
			"rowCallback": function( row, data, index ) {
				if ( data.expediente.urgencia00 == 1 && data.expediente.errorExpediente00 == 0 ) {
					$(row).addClass('orange_row');
				} else if( data.expediente.errorExpediente00 != 0 ) {
					$(row).addClass('red_row');
//					// Crear un tooltip con el error para toda la row
//					$(row).rup_tooltip({
//						content: {
//							text: data.expediente.errorExpediente00_desc
//						}, 
//						position: {
//							my: 'bottom center',  // Position my top left...
//							at: 'center center', // at the bottom right of...
//						},   
//						style: { 
//							classes: 'qtip-red' 
//						}
//					});
					
				}
			},
			drawCallback: function( settings ) {
				$(".sol_urgente_icon").rup_tooltip({
					content: {
						text: $.rup.i18n.app.tooltip.urgente
					}, 
					position: {
						my: 'bottom left',  // Position my top left...
						at: 'top left', // at the bottom right of...
					},   
					style: { 
						classes: 'qtip-orange' 
					}
				});
				
				$(".sol_error_icon").rup_tooltip({
					content: {
						 text: function(event, api) {
					            return $(this).attr('msg');
					        }
						}, 
					position: {
						my: 'bottom left',  // Position my top left...
						at: 'top left', // at the bottom right of...
					},   
					style: { 
						classes: 'qtip-red' 
					}
				});
			},
			columnOrderArrows: {
			    showOnlyActive: false,
			    display: 'inline'
			},
			order: [[1, "desc"]]
		});
	}
	
	const initDialog = () => {
		
	    if($('div[aria-describedby=dialogBandejaTelematica]').length == 1){
	    	$('div[aria-describedby=dialogBandejaTelematica]').remove();
	    	$('#dialogBandejaTelematica').remove();
	    }	    
	    
		$('#dialogBandejaTelematica').rup_dialog({
	        type: $.rup.dialog.DIV,
	        autoOpen: false,
	        modal: true,
	        resizable: true,
	        dialogClass: 'custom_full_dialog',
	        title: '<i>'+$.rup.i18n.app.dialog.title.procesarEntrada+'</i>',
	        buttons: [
	            {
	                text: $.rup.i18n.app.botonera.cancelar,
	                click: function () { 
	                    $('#dialogBandejaTelematica').rup_dialog('close'); 
	                },
	                btnType: $.rup.dialog.LINK
	                
	            },
	        {
	            text: $.rup.i18n.app.botonera.procesar,
	            id: "btnProcesar",
	            click: function () { 
	            	procesarEntrada();
	            },
	            class: 'btn-material btn-material-primary-high-emphasis'
	            
	        },

	        ],
			open: () => {
				// Añadir iconos a los botones del popup
				$("#btnProcesar").html(`<i class="mdi mdi-settings"></i> ${$.rup.i18n.app.botonera.procesar}`);
				
			}
	    });
		
	}

	const openDialogBandejaTelematica = () => {
		const tableName = $('#tableName').val();
		$("#" + tableName + "_processing").show();
		const divTitleDialog = $("div[aria-describedby='dialogBandejaTelematica'] .ui-dialog-title");
		const divDialog = $("div[aria-describedby='dialogBandejaTelematica']");
		const url = '../bandejatelematica/detail';
		
		// Inicializar el feedback
		try {
			$("#bandejaentrada_detail_feedback").rup_feedback("destroy");
		} catch (error) {}

		$("#bandejaentrada_detail_feedback").rup_feedback(
			{
				type: "ok",
				block: false,
				delay: 3000,
				fadeSpeed: 600,
			}
		);

		let ctx = $('#' + tableName).rup_table('getContext');
		$('#idEntrada14Detail').val(ctx.multiselection.selectedIds[0]);

		let data = {};
		data.bandejaTelematica = window.form2object($('#bandejatelematica_dialog_form')[0]);
//		console.log(data);
		data = JSON.stringify(data);
		
		const ajaxData = {
			'url': url,
			'type': 'POST',
			'data': data,
			'contentType': 'application/json',
			'dataType': 'json',
			success: function (data) {
//				console.log(data);
				if (data != undefined) {
					
					let title = '';
					try {
						title = `${$.rup.i18n.app.dialog.title.procesarEntrada}: 
							${data.numRegistro14} / ${data.submisiontype14_desc} - ${data.procedureid14_desc} / ${data.expediente.numExpediente00}
							${data.expediente.urgencia00 == 1
								? '<span class="mdi mdi-clock-fast " style="font-size: 2.5rem;margin-left: 10px;position: absolute;top: 0px;"></span>'
								:''
							}
						`;
						
						if( data.expediente.urgencia00 != 1 ) {
							divDialog.removeClass("custom_dialog_urgente");
						} else {
							divDialog.addClass("custom_dialog_urgente");						
						}
						
						
					} catch (e) {
						title = $.rup.i18n.app.dialog.title.procesarEntrada;
					}
					
					divTitleDialog.html( title );					
										
					// Populate del formulario
					$.rup_utils.populateForm($.rup_utils.jsontoarray(data), "#bandejatelematica_dialog_form");	
//					console.log(data.fRegistro14);
					$("#fechaRegistroDetail").html(data.fRegistro14);
					$("#numeroRegistroDetail").html(data.numRegistro14);
					$("#procedimientoDetail").html(data.procedureid14_desc);
					$("#tipoEntradaDetail").html(data.submisiontype14_desc);
					$("#solicitanteDetail").html(`${data.solicitante.identificador01} - ${data.solicitante.nombre01} ${data.solicitante.apellido101} ${data.solicitante.apellido201}`);
					$("#expedienteDetail").html(data.expediente.numExpediente00);
					$("#estadoExpedienteDetail").html(idioma == 'es' ? data.expediente.estados.descripcionEs30: data.expediente.estados.descripcionEu30);					
					
					cargarTiposProcesos( data );
					
					cargarDocumentos( data, (data.submisiontype14 == TIPO_APORTACION_SOL) );
					
				}				
				
				Ad74aUtils.hacerPlegable();
				$("#"+tableName+"_processing").hide();
				$('#dialogBandejaTelematica').rup_dialog('open');   

			},
			error: function (error) {
				$("#" + tableName + "_processing").hide();
				$('#dialogBandejaTelematica').rup_dialog('close');
				$("#rup_feedback_bandejatelematica").rup_feedback('set', error.responseJSON, "error");
			}
		};
		
		$.rup_ajax(ajaxData);

	}
	
	const cargarTiposProcesos = ( data ) => {
		const url = '../bandejatelematica/tiposProcesos';

		const ajaxData = {
			'url': url,
			'type': 'POST',
			'data': JSON.stringify(data),
			'contentType': 'application/json',
			'dataType': 'json',
			success: function (res) {
				
				Ad74aUtils.configCombo($("#tipoProcesoDetail"), {
					source: res,
					sourceParam : {	label: 'label' ,value: 'value'},
					loadFromSelect:false,
					ordered: false,
					onLoadSuccess: () => {										
						if ( data.submisiontype14 == TIPO_APORTACION_SOL || data.estado14 == ESTADO_ACEPTADA) {
							$("#tipoProcesoDetail").rup_combo("disable");
						}
					}	
				});
				
				setTimeout(() => {		
					console.log(data.tipoProceso);
					$("#tipoProcesoDetail").rup_combo("select", data.tipoProceso);
				}, 100);
			},
			error: function (error) {
				$("#" + tableName + "_processing").hide();
				$('#dialogBandejaTelematica').rup_dialog('close');
				$("#rup_feedback_bandejatelematica").rup_feedback('set', error.responseJSON, "error");
			}
		};
		
		$.rup_ajax(ajaxData);
		
	}
	
	const procesarEntrada = () => {		
		let data = {};
		data.bandejaTelematica = window.form2object($('#bandejatelematica_dialog_form')[0]);		
		const idExpediente = data.bandejaTelematica.expediente.idExpediente00;
		console.log(idExpediente);
		data = JSON.stringify(data);
		
		const url = '../bandejatelematica/process';
		
    	$.rup_ajax({
    		'url': url,
			'type': 'POST',
			'data': data,
			'contentType': 'application/json',
			'dataType': 'json',         	
            success: function (res){    			            	
            	$('#dialogBandejaTelematica').rup_dialog('close'); 
            	$("#bandejatelematica").rup_table("reload")
            	Ad74aUtils.desBloquearInterfaz();
            	$("#rup_feedback_bandejatelematica").rup_feedback('set', $.rup.i18n.app.feedback.operacionOK, "ok");
            	// TODO: abrir nueva ventana con el expediente
            	const urlExpediente = '../expedientes/detail/' + idExpediente;
            	window.open(urlExpediente, "exp_"+idExpediente);
            	
            },
            beforeSend: function(){
            	Ad74aUtils.cerrarFeedbacks();
            	Ad74aUtils.bloquearInterfaz();
			},
            error:function(data){
            	$('#dialogBandejaTelematica').rup_dialog('close'); 
            	Ad74aUtils.desBloquearInterfaz();
            	$("#rup_feedback_bandejatelematica").rup_feedback('set', data.responseText, "error");		    	
            }
        });
		
		
	}
	
	const cargarDocumentos = ( entrada, esSolicitud ) => {
		
		$("#documentosBanTel_filter_form #idEntrada15_filter_table_from").val(entrada.idEntrada14);		
		const documentos_table= $("#documentosbantel");
		
		try {
			$("#documentosbantel").DataTable().destroy();
		} catch (error) {}
			
		const tipificar_dialog = $("#tipificar_documentosEntrada_dialog");
		const tipificar_dialog_feedback = $("#rup_feedback_tipificar_documentos");			
		
		const getColumnsModel = function(){
			const getColumnModel = function(name, index, editable, hidden){
				return {
					name: name,
					index: index,
					editable: editable,
					hidden: hidden
				}
			};	
			const columnsModel = [];
			columnsModel.push(getColumnModel( "roleid15",  "roleid02", false, false));
			columnsModel.push(getColumnModel( "roleName",  "roleName", false, false));
			columnsModel.push(getColumnModel( "roleNameEs15",  "roleNameEs15", false, false));
			columnsModel.push(getColumnModel( "roleNameEu15",  "roleNameEu15", false, false));
			columnsModel.push(getColumnModel( "nombreDoc15",  "nombreDoc15", false, false));
			columnsModel.push(getColumnModel( "idEntrada15",  "idEntrada15", false, false));
			columnsModel.push(getColumnModel( "idDocBanTel15",  "idDocBanTel15", false, false));
			return columnsModel;
		};
		
		const getColumnsDefs = function(){
			const columnsDefs = [
			      { "targets": 1,
	    		    "render": function(data, type, rowData, settings){			           
	    		    	if(rowData.oiddokusi15){
	    		    		return "<a href='javascript:$.downloadDocument(\"" + rowData.oiddokusi15 + "\",\""+rowData.nombreDoc15+ "\");'>" + data + "</a>";					   
	   	    		 	} 
	    		    }
			      }
			   ]
			return columnsDefs;
		};
		
		const getCustomButtons = function(){
		  const customButons = [];	
		  const tipificarButton = {
				text: function () {
					return $.rup.i18n.app.botonera.tipificar;
				},
				
				id: 'tipificar', // Campo obligatorio si se quiere usar desde el contextMenu
				className: 'btn-material-primary-high-emphasis table_toolbar_btnView',
				icon: "mdi-file-send",
				custom:true,				
				insideContextMenu: true, 
				type: 'view',
				action: function (e, dt) {
					tipificar_dialog.rup_dialog("open");
				}				
		  };	
		 
		  customButons.push(tipificarButton);

		  return customButons;
		};
		
		documentos_table.rup_table({
			colReorder: {
				fixedColumnsLeft: 0
			},
			colModel: getColumnsModel(),
			columnDefs:  getColumnsDefs(),
			drawCallback : function( settings ) {//PAra subscribirte a eventos despues de pintar// para cada tr
				Ad74aUtils.desBloquearInterfaz();
		    },
			primaryKey: "idDocBanTel15",
			noEdit: true,
			filter: {
	  	  		id: "documentosBanTel_filter_form",
	  	  		filterToolbar: "documentosBanTel_filter_toolbar",
	  	  		collapsableLayerId: "documentosBanTel_filter_fieldset",
	  	  		showHidden: true
	     	},
	     	select: {
	       		activate: true,
	       		multiSelect:false,
	       		deleteDoubleClick:true
	   		},
			buttons: {
				activate: true,
				blackListButtons: ['reportsButton','addButton', 'editButton', 'cloneButton', 'deleteButton'],
				myButtons: getCustomButtons()
			},
			dom: 't<"container-fluid paginationContainer"' +
			  '<"row mx-0"' +
			  '<"col-6 order-3 text-right align-self-center col-sm-5 order-sm-2 col-xl-2 order-xl-1 text-xl-left">' +
			  '<"d-none"p>' +
			  '<"col-12 text-center"i>' +
			  '>' +
			  '>' +
			  'r',
			columnOrderArrows: {
			    showOnlyActive: false,
			    display: 'inline'
			},
			order: [[1, "asc"]]
		}
		
		);			
		
		documentos_table.on('tableButtonsAfterToolbarInit', function (event, ctx) {//siempre el boton deshabilitado al inicio
			$('#tipificar').prop('disabled', true);
		});
		
		documentos_table.on("click",function(ctx) {
			
			if(documentos_table.rup_table("getSelectedIds").length==0){
				$("#tipificar").prop('disabled', true);
			}else{				
				$("#tipificar").prop('disabled', false);
			}
		});
		
		try {
			tipificar_dialog.rup_dialog("destroy");
		} catch (error) {}
		
		tipificar_dialog_feedback.rup_feedback (
			{
			  type: "ok",
			  block: false,
			}
		);	
		
		tipificar_dialog.rup_dialog( {
			type: $.rup.dialog.DIV,
			autoOpen: false,
			modal: true,
			closeOnEscape: true,
			resizable: true,
			//width:600,
			height:600,
			dialogClass: 'custom_mid_dialog',
			title: $.rup.i18n.app.botonera.tipificar,
			buttons : [ 
                {
                    text:$.rup.i18n.app.botonera.aceptar,
                    id:"tipificar_documentosEntrada_btn",
                    class: 'btn-material btn-material-primary-high-emphasis',
                    click:  () => {
                    	const documento = documentos_table.rup_table("getSelectedRows");
                    	documento["roleid15"] = $("#idTipoDoc_tipificar").rup_combo("getRupValue");
                    	$.rup_ajax({
    			            url: tipificar_dialog.attr("action"),
                    	    type:"POST",
    			            contentType: "application/json",
    			            data:$.toJSON(documento),             	
    			            success: function (data){    			            	
    			            	documentos_table.rup_table("reload")
    			            	tipificar_dialog.rup_dialog("close");
    			            	Ad74aUtils.desBloquearInterfaz();
    			            	$("#bandejaentrada_detail_feedback").rup_feedback('set', $.rup.i18n.app.feedback.titpificarDocuOK, "ok"); 
    			            },
    			            beforeSend: function(){
    			            	Ad74aUtils.cerrarFeedbacks();
    			            	Ad74aUtils.bloquearInterfaz();
    						},
    			            error:function(data){
    			            	Ad74aUtils.desBloquearInterfaz();
    					    	tipificar_dialog_feedback.rup_feedback('set', data.responseText, "error");
    					    	
    			            }
    			        });
                    	
 					}
                 },
				{
					text : $.rup.i18n.app.botonera.cancelar,
					click : () => {
						tipificar_dialog.rup_dialog("close");
					},
					btnType : $.rup.dialog.LINK
				}
			],
			open: function(){
				const documento = documentos_table.rup_table("getSelectedRows");  
				const idTipoProceso = $("#tipoProcesoDetail").rup_combo('getRupValue');
				const procedureID = entrada.procedureid14;
				const roleID = documento.roleid15;
				
				Ad74aUtils.configCombo($("#idTipoDoc_tipificar"), {
					source: $.rup.CTX_PATH + 'combo/getRolDocuments?procedureID='+procedureID+'&idTipoProceso='+idTipoProceso+'&roleID='+roleID,
					sourceParam: {value: "value", label:idioma == 'es' ? "descripcionEs" : "descripcionEu"},
					loadFromSelect:false,						
				});
	
			},
			close: function(){
				$("#idTipoDoc_tipificar").rup_combo("destroy");
				
			}		    
		});	
			
	}
	
	$.downloadDocument = function(oid, nombreDoc){		
		if (oid != null && oid != ''){
			const url = $.rup.CTX_PATH+"bandejatelematica/openOrDownloadDocument/"+oid+"?nombreDoc="+nombreDoc;
			window.open($.rup_utils.setNoPortalParam(encodeURI(url)));	
		}
	}

});