// {} 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_cliente: window.aplicacion.campo.mascara.id_cliente },
		tabla = {
			instancia: new Tabla({
				columna: {
					peticion: {
						ruta: `${window.aplicacion.enlace}/ejecutar`,
						parametro: {
							procedimiento: 'p_traer_encabezado_reportes',
							renglon: 'DOCUMENTOS_CXC',
							tipo_reporte:() => tipo_reporte.value
						}
					}
				},
				datos: {
					peticion: {
						ruta: '../ejecutar?procedimiento=p_traer_documentos_cxc',
						parametro: () => Object.fromEntries(parametros(formularioReporteDocumentosCxC))
					}
				}
			})
		}

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

			respuesta = respuesta[0];

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

			desde_fecha.value = respuesta.desde_fecha;
			desde_fecha.min = respuesta.desde_fecha_minima;
			desde_fecha.max = respuesta.desde_fecha_maxima;

			hasta_fecha.value = respuesta.hasta_fecha;
			hasta_fecha.min = respuesta.hasta_fecha_minima;
			hasta_fecha.max = respuesta.hasta_fecha_maxima

		}
	});

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

		// +
    if (!this.value)
			return cliente.value = null
		;

    // + 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) {

				// ?
				campo.id_cliente.value = '';
				cliente.value = null

			},
      success: function(respuesta, estado, peticion) {},
      error: function(peticion, estado) {},
      complete: function(peticion, estado) {},
      campo: { elemento: this },
      formulario: { elemento: formularioReporteDocumentosCxC }
    })

  });

	// !
	$(formularioReporteDocumentosCxC).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()

	})

})()
