// {} 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 },
		campo = {
			id_nomina: window.aplicacion.campo.selector.id_nomina,
			id_suplidor: window.aplicacion.campo.mascara.id_suplidor
		},
		tabla = {
			facturas: {
				elemento: $(tablaRegistros),
				instancia: new Tabla({
					columna: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar`,
							parametro: {
								procedimiento: 'p_traer_encabezado_reportes',
								renglon: 'CXP',
								tipo_reporte:() => tipo_reporte.value
							}
						}
					},
					datos: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar?procedimiento=p_traer_facturas_cxp`,
							parametro: () => Object.fromEntries(parametros(formularioReporteFacturas))
						}
					}
				}),
			},
			informacion: {
				elemento: $(tabla_informacion),
				clase: new Tabla({
					tabla: tabla_informacion,
					columna: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar`,
							parametro: {
								procedimiento: 'p_traer_encabezado_reportes',
								renglon: 'INFORMACION_ADICIONAL'
							}
						}
					},
					datos: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar`,
							parametro: {
								procedimiento: 'p_traer_informacion_adicional',
								renglon: 'FACTURA',
								id_documento: () => !id_factura.value ? -1 : id_factura.value
							}
						}
					},
					configuracion: {
						dom: `t`,
						pageLength: -1
					}
				}),
			}
		}
	;

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

	$.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_proyecto).on('select2:select', function(evento) {

		campo.id_nomina.parametros();
		campo.id_nomina.peticion('opciones')

	});

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

		// +
    if (!this.value)
			return suplidor.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: 'SUPLIDOR',
        id_renglon: this.value
      },
      beforeSend: function(peticion, configuracion) {

				// ?
				campo.id_suplidor.value = '';
				suplidor.value = null

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

  });

  // !
	$(tabla.facturas.elemento).find('tbody').on('click','tr', function (evento) {

		// +
		id_factura.value = $(this).find('.id').text();

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

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

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

	});

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

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

		// document.title = $('#suplidor').val() + document.title.slice(3);


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

		// +
		tabla.facturas.instancia.inicializar()

	})

})()
