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

// {}
(async () => {

	// ! Declaración de variables
	let
		peticion = { actual: null },
		campo = {
			id_categoria: window.aplicacion.campo.selector.id_categoria,
			id_subcategoria: window.aplicacion.campo.selector.id_subcategoria
		},
		tabla = {
			articulos: {
				elemento: $(tablaRegistros),
				clase: new Tabla({
					tabla: tablaRegistros,
					columna: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar`,
							parametro: { procedimiento: 'p_traer_encabezado_registros' }
						}
					},
					datos: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar`,
							parametro: {
								procedimiento: 'p_traer_registros_combinados',
								renglon: 'ARTICULOS'
							}
						}
					},
					configuracion: { dom: `ft`, pageLength: -1 }
				})
			}
		}

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

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

		campo.id_categoria.parametros();

		campo.id_categoria.peticion('opciones')

	});

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

		campo.id_subcategoria.parametros();

		campo.id_subcategoria.peticion('opciones')

	});

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

		// +
		if (!this.value)
			return $([id_suplidor]).trigger('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: 'SUPLIDOR',
				id_renglon: this.value
			},
			beforeSend: (peticion, configuracion) => $([id_suplidor]).trigger('reset'),
			success: function(respuesta, estado, peticion) {

				if (!respuesta.length)
					return
				;

				respuesta = respuesta[0];

				window.aplicacion.campo.mascara.id_suplidor.value = respuesta.id_suplidor;
				suplidor.value = respuesta.suplidor

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

	});

	// !
	tabla.articulos.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: 'ARTICULO',
				id_renglon: tabla.articulos.instancia.cell(
					evento.currentTarget, '[data-columna-nombre=id_elemento]'
				).data()
			},
			beforeSend: function(peticion, configuracion) {},
			success: function(respuesta, estado, peticion) {

				if (!respuesta.length)
					return
				;

				respuesta = respuesta[0]

				id_categoria.value = respuesta.id_categoria

				campo.id_subcategoria.parametros();

				campo.id_subcategoria.peticion('opciones')

			},
			error: function(peticion, estado) {},
			complete: function(peticion, estado) {},
			formulario: { elemento: formularioArticulos }
		})

	});

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

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

		// configuracion.parametros.get('../ejecutar?procedimiento') === 'p_traer_avances_entidad' &&
		// tabla.facturas.instancia.ajax.reload()

		if (
      window.aplicacion.peticion.formulario.elemento === formularioArticulos &&
      window.aplicacion.peticion.formulario.exitosa.propiedades === window.aplicacion.peticion.exitosa.propiedades
    )
      tabla.articulos.instancia.ajax.reload();


	});

})()
