// {} Librerías e importaciones

// ! Utilidades
import { peticion } from "../../../../utilidades.js";

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

// {}
(async () => {

  let
    campo = {
      id_prestamo: window.aplicacion.campo.selector[formulario_prestamos.id_prestamo.id],
      id_tipo_documento: window.aplicacion.campo.selector[formulario_prestamos.id_tipo_documento.id]
    },
    tabla = {
			prestamos: {
				elemento: $(tabla_prestamos),
				clase: new Tabla({
					tabla: tabla_prestamos,
					columna: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar`,
							parametro: {
								procedimiento: 'p_traer_encabezado_procesos',
								renglon: 'PRESTAMOS'
							}
						}
					},
					datos: {
						peticion: {
							ruta: window.aplicacion.enlace + '/ejecutar',
							parametro: {
								procedimiento: 'p_traer_datos_prestamo',
                renglon: 'DATOS',
								id_cuenta: () => formulario_prestamos.id_prestamo.value
							}
						}
					},
					configuracion: { dom: `t`, pageLength: -1 }
				})
			}
    },
		formulario = {
			selectores: {
				actualizar: formulario_prestamos.dataset.selectorActualizar
			},
			funcion: {
				limpiar: () => {

					delete formulario_prestamos.dataset.selectorActualizar;

					formulario_prestamos.reset();

					formulario_prestamos.dataset.selectorActualizar = formulario.selectores.actualizar

				}
			}
		}
  ;

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

		evento.tabla.clase  = tabla.prestamos.clase;
		tabla.prestamos = evento.tabla

	});

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

	// !
	$(campo.id_prestamo.selector.elemento).change(function(evento) {

		formulario.funcion.limpiar();

		if (!this.value)
			return
		;

		campo.id_tipo_documento.peticion('opciones');

    // + 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: {
				0: 0,
        procedimiento: 'p_traer_datos_prestamo',
        renglon: 'PENDIENTE',
				id_cuenta: this.value
      },
      // beforeSend: function(peticion, configuracion) { formulario.funcion.limpiar() },
      success: function(respuesta, estado, peticion) {

				if (!respuesta.length)
					return
				;

				respuesta = respuesta[0];

				for(let indice in respuesta)
					window.aplicacion.campo.mascara[formulario_prestamos[indice].id].value = respuesta[indice]

			},
      error: function(peticion, estado) {},
      complete: function(peticion, estado) {}
    })

		tabla.prestamos.instancia.ajax.reload()

	});

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

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

    if (!peticion.responseJSON)
      return
    ;

    id_cliente.value &&
    configuracion.parametros.get('procedimiento') === 'p_traer_unico_registro' &&
    campo.id_prestamo.peticion('opciones')

	})

})()
