// {} Librerías e importaciones

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

// {}
(async () => {

  // ! Declaración de variables
  let
    peticion = { actual: null },
    formulario = { elemento: $(formularioDepositosBancarios) },
    tabla = {
      documentos: {
        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_documentos_cuenta_banco',
                id_cuenta_banco: () => id_cuenta_banco.value === '' ? -1 : id_cuenta_banco.value,
                id_tipo_documento: () => id_tipo_documento.value === '' ? -1 : id_tipo_documento.value
              }
            }
          },
          configuracion: { dom: `ft`, pageLength: -1 }
        })
      }
    }

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

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

    tasa.dataset.campoValorPredeterminado = this.selectedOptions[0].dataset.campoValor;

    if (tabla.documentos.peticion)
      return
    ;

    // +
    $(id_tipo_documento).trigger('change');

    // +
    tabla.documentos.instancia.ajax.reload()

  });

  // !
  $(id_tipo_documento).change(function(evento) {

    // +
    if (!id_cuenta_banco.value || !this.value)
      return documento.value = null
    ;

    // +
    if (tabla.documentos.peticion)
      return
    ;

    // +
    peticion.actual && peticion.actual.abort();

    // +
    peticion.actual = $.ajax({
      url: `${window.aplicacion.enlace}/ejecutar`,
      data: {
        procedimiento: 'p_traer_secuencias',
        renglon: 'BANCOS',
        id_cuenta_banco: id_cuenta_banco.value,
        id_tipo_documento: this.value,
        accion: 'NUEVO'
      },
      beforeSend: function(peticion, configuracion) {},
      success: function(respuesta, estado, peticion) {

        if (!respuesta.length)
          return
        ;

        respuesta = respuesta[0];

        documento.value = respuesta.secuencia

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

  });

  // !
  formulario.elemento.on('reset', function(evento) {

    tabla.documentos.peticion = false;

    $(id_tipo_documento).trigger('change')

  });

	// !
  tabla.documentos.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`,
      data: {
        procedimiento: 'p_traer_unico_registro',
        renglon: 'BANCO',
        id_renglon: $(evento.currentTarget).find('.id').text()
      },
      beforeSend: function(peticion, configuracion) {},
      success: function(respuesta, estado, peticion) { tabla.documentos.peticion = true },
      error: function(peticion, estado) {},
      complete: function(peticion, estado) {},
      formulario: { elemento: formularioDepositosBancarios }
    })

  });

  // !
	$(document).on('ajaxSuccess', function(evento, peticion, configuracion) {

		if (
      window.aplicacion.peticion.formulario.elemento === formularioDepositosBancarios &&
      window.aplicacion.peticion.formulario.exitosa.propiedades === window.aplicacion.peticion.exitosa.propiedades
    )
			$("#tablaRegistros").DataTable().ajax.reload()
		;

    if (!peticion.responseJSON)
      return
    ;

    peticion.respuesta = peticion.responseJSON[0];

    peticion.respuesta?.mensaje &&
    peticion.respuesta.mensaje !== 'PUEDES GUARDAR' &&
		$(id_cuenta_banco).trigger('change')

	})

})()
