// {} Librerías e importaciones

// ! Tabla
import Tabla from '../../elementos/tabla.js';
import { parametros, formatoNumerico } from '../../../utilidades.js';

// {}
(async () => {

  // ! Declaración de variables
  let peticion = {
    actual: null
  },
	campo = {
		diferencia: window.aplicacion.campo.mascara.diferencia
	},
	tabla = {
		indicadores: {
			elemento: $(tabla_indicadores),
			clase: new Tabla({
				tabla: tabla_indicadores,
				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: 'indicadores'
						}
					}
				}
			})
		},
		desglose: {
			elemento: $(tabla_desglose),
			clase: new Tabla({
				tabla: tabla_desglose,
				datos: {
					peticion: {
						ruta: `${window.aplicacion.enlace}/ejecutar`,
						parametro: {
							procedimiento: 'p_traer_detalle_indicador',
							id_indicador: () => id_indicador.value,
							monto: () => monto.value,
							tipo_indicador: () => tipo_indicador.value
						}
					}
				},
				configuracion: {
					dom: `t`,
					pageLength: -1,
					autoWidth: false
				}
			})
		}
	}

	// !
	$('table').on('draw.dt', function(evento) {

		evento.id = evento.tabla.id.replace('tabla_', '');

		if (!tabla[evento.id])
			return
		;

		evento.tabla.clase  = tabla[evento.id].clase;
		tabla[evento.id] = evento.tabla

	});

	$(monto).on('focusout', function (evento) {


		tabla.desglose.instancia.ajax.reload();

	});

/* 	$(botonDesglosar).on('click', function (evento) {
		tabla.desglose.instancia.ajax.reload();
	})
 */
	// $(tipo_indicador).on('change', function (evento) {

	// 	if(!monto.value)
	// 		return
	// 	;

	// 	tabla.desglose.instancia.ajax.reload();

	// });

	$(botonGuardar).on('click', (evento) => {

		let formulario = {
			peticion: {
				parametro: parametros(formularioIndicadores)
			}
		}

		formulario.peticion.parametro.append(
			'json_detalle_indicador',
			JSON.stringify(tabla.desglose.instancia.data().toArray().map(valor => ({
				id: Number(valor.id) ?? 0,
				mes: valor.mes ?? '',
				valor: Number(valor.valor.replaceAll(',', '') ?? 0)
			})))
		);

		window.aplicacion.peticion.formulario.parametro = formulario.peticion.parametro
	})

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

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

	// !
	$(tabla.desglose.elemento).find('tbody').on('change', 'tr', function(evento) {

		const proyectado = Number(evento.tabla.columna.proyectado.pie.elemento.textContent.replaceAll(',', ''));
		const valor = Number(evento.tabla.columna.valor.pie.elemento.textContent.replaceAll(',', ''));

		campo.diferencia.unmaskedValue =
		formatoNumerico( Math.abs( proyectado - valor ) ,2 ).toString();

	});


	// !
	$(tabla.indicadores.elemento).find('tbody').on('click dblclick', 'tr', function(evento) {

		const llenarCampos = (env) => {

			// + 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: 'INDICADORES',
					id_renglon: $(env.currentTarget).find('.id').text()
				},
				beforeSend: function(peticion, configuracion) {},
				success: async function(respuesta, estado, peticion) {},
				error: function(peticion, estado) {},
				complete: async function(peticion, estado) {

					tabla.indicadores.instancia.ajax.reload();

					tabla.desglose.instancia.ajax.reload();

				},
				formulario: { elemento: formularioIndicadores }
			})

		}

		if(evento.type === 'dblclick' )
		{
			llenarCampos(evento);
		}

		else {

			if (!$(evento.target).closest('.modificar').length)
				return
			;

			llenarCampos(evento);

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

		}
	});

	$(ventana_detalle_indicador).on('click','#botonCerrarModal', function (evento) {

		totalProyectado();
	});

	// !
	$(botonGuardarModal).on('click', function () {

		if(totalProyectado() === false)
			return
		;

		$(botonGuardar).trigger('click');
	});

	$(formularioIndicadores).on('reset',(evento) => {


		setTimeout(() => {
			tabla.desglose.instancia.ajax.reload();
		}, 300);

		$(tabla_indicadores).find('tbody').find('tr.table-active').removeClass('table-active')

	});

	const totalProyectado = () => {
		let totalProyectado = $('#tabla_desglose_wrapper .dataTables_scroll .dataTables_scrollFootInner tfoot tr th:nth-last-child(2)').text();

		totalProyectado = Number(totalProyectado.replaceAll(',', ''));

		if(totalProyectado !== Number(monto.value.replaceAll(',', '')) )
		{

			// +
			$(this).find('.is-invalid').removeClass('is-invalid');

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

			$(ventanaEmergenteAlerta).find('.modal-body p').text('¡El MONTO PROYECTADO ES DIFERENTE A EL MONTO TOTAL, POR FAVOR VERIFIQUE!');

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

			return false

		}

		$(ventana_detalle_indicador).modal('hide');
	}

  $(document).on('ajaxSuccess', (evento, configuracion) => {

    if (
      window.aplicacion.peticion.formulario.elemento === formularioIndicadores &&
      window.aplicacion.peticion.formulario.exitosa.propiedades === window.aplicacion.peticion.exitosa.propiedades &&
			new URLSearchParams(window.aplicacion.peticion.exitosa.configuracion.url).get('renglon') === 'guardar'
    )
		{
			tabla.indicadores.instancia.ajax.reload();

			$(ventana_detalle_indicador).modal('hide')

		}
  });

})();
