// {} Librerías e importaciones

// ! Utilidades
import { parametros } from "../../../utilidades.js";

// ! Tabla
import Tabla from "../../elementos/tabla.js";

// {}
(async () => {

  // ! Declaración de variables
  let
		peticion = {
			actual: null,
			response: null
		},
		impresion = {
			id: null,
			renglon: null
		},
		tabla = {
			instancia: new Tabla({
				columna: {
					peticion: {
						ruta: `${window.aplicacion.enlace}/ejecutar`,
						parametro: {
							procedimiento: 'p_traer_encabezado_reportes',
							programa: 'reportes.documentos'
						}
					}
				},
				datos: {
					peticion: {
						ruta: `${window.aplicacion.enlace}/ejecutar?procedimiento=p_traer_documentos`,
						parametro: () => Object.fromEntries(parametros(formularioDocumentos))
					}
				},
				configuracion: {
					dom: 'ft'
				}
			}),
			informacion: {
				elemento: $(tablaRegistrosInformacion),
				clase: new Tabla({
					tabla: tablaRegistrosInformacion,
					columna: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar`,
							parametro: {
								programa: 'PROCESOS.CONSULTASOLICITUDESPRESTAMOS',
								procedimiento: 'p_traer_encabezado_adicional'
							}
						}
					},
					datos: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar`,
							parametro: {
								procedimiento: 'p_traer_informacion_adicional',
								renglon: 'DOCUMENTOS',
								id_documento: () => !id_documento.value ? -1 : id_documento.value,
								renglon: () => !renglon.value ? -1 : renglon.value
							}
						}
					},
					configuracion: {
						dom: `t`,
						pageLength: -1,
						autoWidth: false
					}
				})
			}
		}
	;

	// !
	await tabla.informacion.clase.inicializar();
	tabla.informacion.instancia = tabla.informacion.elemento.DataTable();

	$.ajax({
		url: `${window.aplicacion.enlace}/ejecutar`,
		data: {
			procedimiento: 'p_traer_fechas',
			renglon: 'DOCUMENTOS'
		},
		success: function (respuesta) {

			respuesta = respuesta[0];

			$.each(respuesta, (indice, valor) => respuesta[indice] = respuesta[indice].split(' ')[0]);

			desde_fecha.value = respuesta.desde_fecha;

			hasta_fecha.value = respuesta.hasta_fecha;

		}

	});

	// !
	await tabla.instancia.inicializar();

	$('#tablaRegistros tbody').on('click','tr', function (evento) {

		impresion.id = $(evento.currentTarget).find('.id').text(),
		impresion.programa = aCamelCase($(evento.currentTarget).find('td:first-child').text())

		botonImprimir.disabled = false;

		// +
		id_documento.value = impresion.id;

		// +
		renglon.value = $(evento.currentTarget).find('td:first-child').text()

		// +
		if (!$(evento.target).closest('.visualizar').length)
			return
		;

		// +
		tabla.informacion.instancia.ajax.reload();

		// +
		$(ventana_informacion).modal('show')

  });

	$(botonImprimir).click(function (evento) {

		$.ajax({
			type: 'get',
			url: `${window.aplicacion.enlace}/impresion`,
			data: {
				generico: 1,
				id: impresion.id,
				programa: `procesos.${impresion.programa}`,
				renglon: 'SOLICITUD_PAGO'
			},
			dataType: 'JSON',
			success: async function (response) {

				const nuevaVentana = window.open(''
				,'_blank',
				`width = 992, height = ${window.screen.height - 100}, left = ${(window.screen.width - 992) / 2}, top = ${(window.screen.height - 600) / 2}`,
				);
				nuevaVentana.document.write(response);
				nuevaVentana.document.close();

			}
		});

	});

	// $(botonImprimir).click(function (evento) {

	// 	$.ajax({
	// 		type: 'get',
	// 		url: '../impresion',
	// 		data: {
	// 			id: 220,
	// 			programa: `procesos.${'avances'}`,
	// 			renglon: 'AVANCE'
	// 		},
	// 		dataType: 'JSON',
	// 		success: async function (response) {

	// 			const nuevaVentana = window.open(''
	// 			,'_blank',
	// 			`width = 992, height = 600, left = ${(window.screen.width - 992) / 2}, top = ${(window.screen.height - 600) / 2}`,
	// 			);
	// 			nuevaVentana.document.write(response);
	// 			nuevaVentana.document.close();

	// 		}
	// 	});

	// });

	// !
	$(formularioDocumentos).on('submit reset', function(evento) {

		if (evento.type === 'reset')
			return tabla.instancia.destruir()
		;

		if (
			(!document.activeElement.type && !['BODY', 'DIV'].includes(document.activeElement.tagName)) ||
			(document.activeElement.type && document.activeElement.type !== 'submit')
		)
			return
		;

		// +
		tabla.instancia.inicializar()

	});

	// !
	function aCamelCase(inputString) {
    return inputString.toLowerCase().replace(/_([a-z])/g, function(match, group1) {
			return group1.toUpperCase();
		});
	}

})()
