// {} Librerías e importaciones

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

// {}
(async () => {

  // ! Declaración de variables
  let
		peticion = { actual: null },
		campo = { id_cuenta: window.aplicacion.campo.selector.id_cuenta },
		tabla = {
      elemento: $(tablaRegistros),
      clase: new Tabla({
        tabla: $(tablaRegistros),
        columna: {
          peticion: {
            ruta: `${window.aplicacion.enlace}/ejecutar`,
            parametro: { procedimiento: 'p_traer_encabezado_procesos'}
          }
        },
        datos: {
          peticion: {
            ruta: `${window.aplicacion.enlace}/ejecutar`,
            parametro: {
              procedimiento: 'p_traer_cargos_cliente',
							id_cliente: () => !id_cliente.value ? -1 : id_cliente.value
            }
          }
        },
				configuracion: { dom: `t`, pageLength: -1 }
      })
		}

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

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

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

    // +
    if (!this.value)
      return formularioCargos.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: (peticion, configuracion) => formularioCargos.reset(),
      success: function(respuesta, estado, peticion) {},
      error: function(peticion, estado) {},
      complete: (peticion, estado) => tabla.instancia.ajax.reload(),
      campo: { elemento: this },
      formulario: { elemento: formularioCargos }
    })
  });

  tabla.elemento.find('tbody').on('dblclick', 'tr', function(evento) {

		// + 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`,
      type: 'GET',
      data: {
        procedimiento: 'p_traer_unico_registro',
        renglon: 'CARGO',
				id_renglon: $(evento.currentTarget).find('.id').text()
      },
      beforeSend: function(peticion, configuracion) {},
      success: function(respuesta, estado, peticion) {},
      error: function(peticion, estado) {},
      complete: function(peticion, estado) {},
      formulario: { elemento: formularioCargos }
    })

  });

	// !
	$(document).on('ajaxSuccess', async (evento, configuracion) => {

		configuracion.parametros = new URLSearchParams(configuracion.url);

		configuracion.parametros.get('procedimiento') === 'p_registrar_cargos' &&
    configuracion.parametros.get('renglon') === 'guardar' &&
		tabla.instancia.ajax.reload()

	});

})()
