#!/bin/bash
#set -x
source /etc/nodemecu.conf
source /opt/nodemecu/envs
source $funciones 

while :;do
	
	# archivo a procesar
	file=$(get_stack)

	# si no hay nada que procesar reinicia el bucle
	test -z $file && funcion_espera && continue

	# si no hay servidor definido se reinicia el bucle
	test -z $servidor && echo "No se configuró nigun servidor de entrega." && funcion_espera && continue

	# si no hay internet reinica el bucle
	if ! funcion_verificar_internet; then
		err_time=$(date +%Y-%m-%d-%H:%M:%S)
		echo "$err_time - Parece no haber internet." | tee -a $log
		funcion_espera
		continue
	fi

	# si el fichero 'lock' existe (se esta creando un nuevo registro) reinicia el bucle
	test -f $lock && continue

	# validación del fichero
	if ! funcion_validador_json "$(cat $registros/$file)";then
	       	mv $registros/$file $registros_corruptos
		continue
	fi

	# firmado de regisro
	firma=$(sign_file $registros/$file)

	# UUID del registro a enviar
	uuid_registro=$(jq -r '."transaction_uuid"' $registros/$file)

	# envio de registro
	transaccion=$(curl  -v -s --show-error -w "~%{http_code}" -X POST -H "X-Signature: $(sign_file $registros/$file)" -H "Content-Type: application/json" -d @$registros/$file $servidor 2> $curl_err)

	# respuestas del servidor
	respuesta_servidor="$(echo $transaccion | cut -d '~' -f 1)"
	error_servidor="$(echo $transaccion | cut -d '~' -f 2)"

	if [ ${#respuesta_servidor} -eq 36 ] && [ "$uuid_registro" == "$respuesta_servidor" ]; then
			echo -e "$respuesta_servidor: \e[92mOK\e[0m"
			mv $registros/$file $registros/$file.sig $historicos
	else

		err_time=$(date +%Y-%m-%d-%H:%M:%S)
		srv_msg="$(echo $respuesta_servidor | grep -o '<body.*>.*</body>')" 
		echo -e "$err_time - $uuid_registro: \e[91mFAIL\e[0m"

		echo "$err_time - $uuid_registro - Error del servidor: $error_servidor" >> $log
		echo "$err_time - $uuid_registro - Mensaje del servidor:" >> $log
		echo "$srv_msg" >> $log
		if [ -s $curl_err ];then
			echo "$err_time - $uuid_registro - Salida de curl:" >> $log
			cat $curl_err >> $log
		fi

		rm $curl_err
		#funcion_espera
	fi

	#exit
done 



######

	# se testea que el servidor responda
	#test_url="$(curl -s -X POST -o /dev/null -w "%{http_code}" $servidor)"
	#if [ $test_url -eq 404 ];then
	#	echo "$(date +%Y-%m-%d-%H:%M:%S) - $url - $test_url" >> /opt/nodemecu/errors.log && sleep 300 && continue 
	#fi
