// {} Librerías e importaciones

// ! Tabla
import Tabla from "../../elementos/tabla.js";
import { parametros } from "../../../utilidades.js";

// {}
(() => {

  // ! Declaración de variables
  let
    peticion = { actual: null },
    campo = {
      tipo_avance: {},
      id_entidad: { etiqueta: $('[for="id_entidad"]') }
    },
    ventana = {
      emergente: {}
    },
		tabla = {
			instancia: new Tabla({
				columna: {
					peticion: {
						ruta: `${window.aplicacion.enlace}/ejecutar`,
						parametro: {
							procedimiento: 'p_traer_encabezado_reportes',
							renglon: 'AVANCES',
							tipo_reporte:() => tipo_reporte.value
						}
					}
				},
				datos: {
					peticion: {
						ruta: '../ejecutar?procedimiento=p_traer_avances',
						parametro: () => Object.fromEntries(parametros(formularioReporteAvances))
					}
				}
			})
		}

	$.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

		}
	});

  // !
  $(tipo_avance).on('change', function(evento) {

    ventana.emergente.inicializador = $(id_entidad).closest('.input-group').find('[data-bs-target]')[0];

    $(ventana.emergente.inicializador).add(id_entidad).prop('disabled', !this.value);

    if (this.value === 'cliente') {

      id_entidad.name = 'id_cliente';
      entidad.name = 'cliente';

      ventana.emergente.inicializador.dataset.peticionTabla = 'clientes';
      ventana.emergente.inicializador.dataset.peticionCampo = 'cliente';
      ventana.emergente.inicializador.dataset.ventanaEmergenteTabla = 'Clientes'

    } else if (this.value === 'suplidor') {

      id_entidad.name = 'id_suplidor';
      entidad.name = 'suplidor';

      ventana.emergente.inicializador.dataset.peticionTabla = 'suplidores';
      ventana.emergente.inicializador.dataset.peticionCampo = 'suplidor';
      ventana.emergente.inicializador.dataset.ventanaEmergenteTabla = 'Suplidores'

    }

    $(id_entidad).trigger('reset')

  });

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

    // +
    if (!this.value)
      return $(this).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: ventana.emergente.inicializador.dataset.peticionCampo,
        id_renglon: this.value
      },
      beforeSend: (peticion, configuracion) => $(this).trigger('reset'),
      success: function(respuesta, estado, peticion) {},
      error: function(peticion, estado) {},
      complete: (peticion, estado) => {},
      campo: { elemento: this },
      formulario: { elemento: formularioReporteAvances }
    })

  });

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

	})


})()
