// {} Librerías e importaciones

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

// {}
(async () => {

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

	// !
	tabla.cuentas.elemento.on('draw.dt', function(evento) {

		evento.tabla.clase = tabla.cuentas.clase;
		tabla.cuentas = evento.tabla

	});

  // !
	await tabla.cuentas.clase.inicializar();

	// !
	$(id_cliente).on('focusout',function(evento) {

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

		// +
    if (!this.value)
      return formularioCambiosCuentas.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) { $(this).trigger('reset') },
			success: function(respuesta, estado, peticion) {

				if (!respuesta.length)
					return
				;

				respuesta = respuesta[0];

				campo.id_cliente.value = respuesta.id_cliente;
				cliente.value = respuesta.cliente

			},
			error: function(peticion, estado) {},
			complete: function(peticion, estado) { tabla.cuentas.clase.actualizar() },
      campo: { elemento: this }
		})

	})

})()
