// {} Librerías e importaciones

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

// ! Parámetros
import { parametros } from "../../../utilidades.js";

// {}
(() => {

  // ! Declaración de variables
  let peticion = { actual: null }

  // !
  new Tabla({
    columna: {
      boton: { eliminar: true }
    },
    datos: {
      peticion: {
        ruta: `${window.aplicacion.enlace}/ejecutar`,
        parametro: {
          procedimiento: 'p_traer_datos_entidad',
          renglon: 'CUENTAS_BANCOS',
          id_renglon: id_empleado.value
        }
      }
    },
    configuracion: {
      dom: `t`,
      pageLength: -1
    }
  }).inicializar();

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

    // +
    if (!this.value)
      return formularioEmpleado.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: 'EMPLEADO',
        id_renglon: this.value
      },
      beforeSend: function(peticion, configuracion) { formularioEmpleado.reset() },
      success: function(respuesta, estado, peticion) {},
      error: function(peticion, estado) {},
      complete: function(peticion, estado) {

      $(tablaRegistros)
        .dataTable()
        .fnSettings()
        .ajax
        .data
        .id_renglon = id_entidad.value
      ;

      $(tablaRegistros).DataTable().ajax.reload()

      },
      campo: { elemento: this },
      formulario: { elemento: formularioEmpleado }
    })

  });

  // !
  $(botonGuardar).click(function(evento) {

		// +
    let formulario = {
      peticion: { parametro: parametros(formularioEmpleado) }
    }

    // +
    formulario.peticion.parametro.append(
      'json_cuentas_bancos',
      JSON.stringify($(tablaRegistros).DataTable().data().toArray().map((valor, iteracion) => {

        valor.id_banco = Number(valor.id_banco);
        valor.id_entidad = Number(valor.id_entidad);

        return valor

      }))
    );

    // +
    window.aplicacion.peticion.formulario.parametro = formulario.peticion.parametro

  });

  // !
  $(botonLimpiar).click(function(evento) {

    $(tablaRegistros)
      .dataTable()
      .fnSettings()
      .ajax
      .data
      .id_renglon = null
    ;

    $(tablaRegistros).DataTable().ajax.reload()

  });

	// !
	$(botonAgregar).click(function(evento) {

		// +
		if (
			(!document.activeElement.type && !['BODY', 'DIV'].includes(document.activeElement.tagName)) ||
			(document.activeElement.type && document.activeElement.type !== 'submit')
		)
			return
		;

		let formulario = {
			campos: {
				contenedor: function() { return this.validar.closest('.row') },
				validar: $('[name="id_banco"], [name="id_tipo_cuenta_banco"], [name="numero_cuenta"]')
			}
		}

		// +
		formulario.campos.contenedor().find('.is-invalid').removeClass('is-invalid');

		// +
		$('#ventanaEmergenteAlerta .modal-header')
			.removeClass('bg-success')
			.addClass('bg-danger')
		;

		// +
		formulario.campos.validar.each((indice, elemento) => {

			elemento.value = elemento.value.trim();

			if (!elemento.value) {

				$('#ventanaEmergenteAlerta .modal-body p').text(
					`¡El ${elemento.name.replaceAll('id_', '').replaceAll('_', ' de ')} es obligatorio!`
				);

				window.aplicacion.peticion.formulario.campo.invalido = $(elemento).addClass('is-invalid');

				$(ventanaEmergenteAlerta).modal('show');

				return false

			}

			if (elemento.name === 'numero_cuenta')
				$(`#tablaRegistros tbody .numero_cuenta:contains(${elemento.value})`).each((valor, indice) => {

					indice.textContent = indice.textContent.trim();

					if (indice.textContent === elemento.value) {

						$('#ventanaEmergenteAlerta .modal-body p').text(`¡El número de cuenta ${indice.textContent} ya existe!`);

						window.aplicacion.peticion.formulario.campo.invalido = $(elemento).addClass('is-invalid');

						$(ventanaEmergenteAlerta).modal('show');

						return false

					}

				})

		});

		if (formulario.campos.contenedor().find('.is-invalid').length)
			return
		;

		$(tablaRegistros).DataTable().row.add({
			id_entidad: id_entidad.value,
			id_banco: id_banco.value,
			banco: $('#id_banco option:selected').text().trim(),
			tipo_cuenta: $('#id_tipo_cuenta option:selected').text().trim(),
			cuenta_banco_entidad: numero_cuenta.value,
			referencia: referenciaCuentaBanco.value
		}).draw(false);

		formulario.campos.validar.add('#referenciaCuentaBanco').trigger('reset')

	});

  // !
	$(botonLimpiar).click(function (evento){

		peticion.actual && peticion.actual.abort()

	})

})()
