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

// {}
(() => {

	// ! Declaración de variables
	let
		peticion = { actual: null }, campo = { numero_cuenta: window.aplicacion.campo.mascara.numero_cuenta };

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

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

		// +
		if (!this.value)
			return formularioClientes.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) { formularioClientes.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();

				$(id_relacion).trigger('focusout');

			},
			campo: { elemento: this },
			formulario: { elemento: formularioClientes }
		});

	});

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

		// +
		if (!this.value)
			return;

		// + 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: 'RELACIONADO',
				id_renglon: this.value
			},
			beforeSend: function (peticion, configuracion) { },
			success: function (respuesta, estado, peticion) {

				id_relacion.value = respuesta[0].id_relacionado;
				relacionado.value = respuesta[0].relacionado;

			},
			error: function (peticion, estado) { },
			complete: function (peticion, estado) { },
			campo: { elemento: this },
		});

	});



	// !
	// $(botonGuardar).click(function (evento) {
	// 	// +
	//   let formulario = {
	//     peticion: { parametro: parametros(formularioClientes) }
	//   }
	//   // +
	//   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
	// 	$(formularioClientes).submit()
	// });
	// !
	$(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"]')
			}
		}, tabla = {
			datos: {
				id_entidad: id_entidad.value,
				id_banco: id_banco.value,
				banco: $('#id_banco option:selected').text().trim(),
				tipo_cuenta: $('#id_tipo_cuenta_banco option:selected').text().trim(),
				cuenta_banco_entidad: numero_cuenta.value,
				referencia: referenciaCuentaBanco.value
			},
			modificar: null
		};

		// +
		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) {

						tabla.modificar = indice.parentElement;
						return false;

					}

				});

		});

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

		if (tabla.modificar) {
			$(tablaRegistros).DataTable().row(tabla.modificar).data(tabla.datos).draw(false);
		} else {
			$(tablaRegistros).DataTable().row.add(tabla.datos).draw(false);
		}

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

	});

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

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

	});

	// !
	$('#tablaRegistros tbody').unbind('click').on('click dblclick', 'tr', function (evento) {

		// +
		let datos = $(tablaRegistros).DataTable().row(this).data();

		// +
		if (evento.type === 'dblclick') {

			$(id_banco).val(datos.id_banco).change();
			$(id_tipo_cuenta_banco).val(datos.tipo_cuenta).change();
			campo.numero_cuenta.value = datos.cuenta_banco_entidad;
			referenciaCuentaBanco.value = datos.referencia;

			return;

		}

		// +
		if (!$(evento.target).closest('.eliminar').length)
			return;

		// +
		$(botonAccion).trigger('click', {
			tipo: 'eliminar',
			funcion: () => $(evento.delegateTarget).closest('table').DataTable().row(this).remove().draw(false)
		});

	});

})();
