// {} Librerías e importaciones

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

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

// {}
(() => {

  // ! Declaración de variables
  let
		peticion = { actual: null },
		campo = { id_contacto: window.aplicacion.campo.selector.id_contacto },
		tabla = {
			instancia: new Tabla({
				columna: {
					peticion: {
						ruta: `${window.aplicacion.enlace}/ejecutar`,
						parametro: {
							procedimiento: 'p_traer_encabezado_reportes',
							programa: window.aplicacion.ruta,
							tipo_reporte:() => tipo_reporte.value
						}
					}
				},
				datos: {
					peticion: {
						ruta: `${window.aplicacion.enlace}/ejecutar?procedimiento=p_traer_seguimientos`,
						parametro: () => Object.fromEntries(parametros(formularioReporteSeguimientos))
					}
				}
			})
		}
	;

	// !
	const traerFechas = () => {

		// !
		$.ajax({
			url: `${window.aplicacion.enlace}/ejecutar`,
			data: {
				procedimiento: 'p_traer_fechas',
				renglon: 'SEGUIMIENTOS'
			},
			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.desde_fecha;

			}
		});

	}

	traerFechas();

	// !
	$(id_cliente).focusout(function(evento) {

		// +
		if (!this.value)
			return $([id_cliente, cliente, id_entidad]).trigger('reset')
		;

		// + Condición para verificar si la
		// + petición existe y cancelarla
		peticion.actual &&
		peticion.actual.abort();

		// + Petición hacía el
		// + controlador 'traerRegistros'
		peticion.actual = $.ajax({
			url: `${window.aplicacion.enlace}/ejecutar`,
			data: {
				procedimiento: 'p_traer_unico_registro',
				renglon: 'CLIENTE',
				id_renglon: this.value
			},
			beforeSend: function(peticion, configuracion) { $([id_cliente, cliente, id_entidad]).trigger('reset') },
			success: function(respuesta, estado, peticion) {},
			error: function(peticion, estado) {},
			complete: async function(peticion, estado) {

				campo.id_contacto.parametros();
				await campo.id_contacto.peticion('opciones');

			},
			campo: { elemento: this },
			formulario: { elemento: formularioReporteSeguimientos }
		})

	});

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

		// +
		if (evento.type === 'reset'){

			// !
			traerFechas();

			// !
			return tabla.instancia.destruir()
		}
		;

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

		// +
		await tabla.instancia.inicializar()

	})

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

		const id_seguimiento = $(this).closest('tr').find('.id').text();

		window.open(
			`${window.aplicacion.enlace}/registros/seguimientos?id_seguimiento=${id_seguimiento}`,
			'',
			`width = 992, height = 600, left = ${(window.screen.width - 992) / 2}, top = ${(window.screen.height - 600) / 2}`,
		);

	});

})()
