#!/bin/bash
### BEGIN INIT INFO
# Provides:          EMA Libre Carpincho
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: EMA Libre Carpincho demonio
# Description: 	     Start/stop/Restart EMA Libre Carpincho
### END INIT INFO

### CONFIG ZONE
# Get function from functions library
#set -e
. /lib/lsb/init-functions

RETVAL=0

#  Nombre del servicio.
serviceName="emalibre"

# Ubicacion de la APP
appFilePath="/usr/share/emalibre"

# Archivo de Inicio.
web="gui_web/express.js"

### END CONFIG ZONE

# Ubicacion de logs y del pid.
pidFile="/var/run/$serviceName.pid"
logFile="/var/run/$serviceName.log"

# Ubicacion de node como modulo de carpincho.
nodemodule="$appFilePath/node_modules/node/bin"

# Ubicacion de forever como modulo de carpincho.
foreverApp="$appFilePath/node_modules/forever/bin/forever"

# Ubicacion de logs de EMA Libre 
emaLogs="$appFilePath/logs/debug.log"

export PATH=$PATH:$nodemodule

start() {
	if [ ! -f /etc/emalibre_modo ]
		then
		`echo "web" > /etc/emalibre_modo`
		fi
	MODO=`cat /etc/emalibre_modo`
	if [ -f $pidFile ]; then
		log_daemon_msg "EMA libre Carpincho se encuentra corriendo."
		RETVAL=$?
	else
			if [ $MODO = 'web' ]
			then
				log_daemon_msg "Comenzando EMA Libre Carpincho en modo web"
				echo "$(date '+%d/%m/%Y %H:%M:%S') - 0|SERVICIO|Inicio el servicio en modo web." >> $emaLogs
				$foreverApp start --uid "EMA_Web" --id "EMA_Web" --minUptime 5000 --spinSleepTime 5000 --sourceDir $appFilePath --workingDir $appFilePath --pidFile $pidFile -l $logFile -a -d -c node "$web" iniciar
				RETVAL=$?
			fi
	fi
	RETVAL=$?
}

restart() {
	log_daemon_msg "Reiniciando EMA Libre Carpincho"
	echo "$(date '+%d/%m/%Y %H:%M:%S') - 0|SERVICIO|Reiniciando el servicio." >> $emaLogs
	$foreverApp restart $nodemodule
	RETVAL=$?
}

stop() {
	if [ -f $pidFile ]; then
		log_daemon_msg "Deteniendo EMA Libre Carpincho."
		echo "$(date '+%d/%m/%Y %H:%M:%S') - 0|SERVICIO|Detenido el servicio." >> $emaLogs
		$foreverApp stopall
		RETVAL=$?
	else
		log_daemon_msg "EMA libre Carpincho no se encuentra ejecutandose."
	fi
	RETVAL=$?
}


status() {
  log_daemon_msg "Mostrando estado nativo del servicio."
  RETVAL=$?
}


uptime() {
   echo "$(date '+%d/%m/%Y %H:%M:%S') - 0|SERVICIO|Mostrando el uptime del servicio (consola)." >> $emaLogs
   $foreverApp list
   RETVAL=$?
}

reporte() {
   echo "$(date '+%d/%m/%Y %H:%M:%S') - 0|SERVICIO|Mostrando el reporte de consola." >> $emaLogs
   pushd "$appFilePath"
   "$nodemodule/node" core/reporte.js
   RETVAL=$?
}

if [ -d /usr/share/emalibre/gui_web ]
then
	# SI EXISTE EL MODULO GUI_WEB se habilitan algunas opciones
	case "$1" in
	start)
			start

			;;
	stop)
			stop

			;;
	status)
			status

			;;
	restart)
			restart

			;;
	reporte)
			reporte

			;;
	uptime)
			uptime

			;;
	set-inicio-enabled)
			log_daemon_msg "Se Habilito el servicio para inicio automatico."
			systemctl enable emalibre
    "$nodemodule/node" -e "
    const fs = require('fs');
    const cfgPath = '/usr/share/emalibre/conf/ConfiguracionGeneral.js';
    const cfg = require(cfgPath);
    cfg.ConfGeneral.inicio_automatico = true;
    fs.writeFileSync(
      cfgPath,
      'module.exports = ' + JSON.stringify(cfg, null, 2) + ';\n'
    );
    "

			;;
	set-inicio-disable)
			log_daemon_msg "Se Deshabilito el inicio automatico del servicio."
			systemctl disable emalibre
    "$nodemodule/node" -e "
    const fs = require('fs');
    const cfgPath = '/usr/share/emalibre/conf/ConfiguracionGeneral.js';
    const cfg = require(cfgPath);
    cfg.ConfGeneral.inicio_automatico = false;
    fs.writeFileSync(
      cfgPath,
      'module.exports = ' + JSON.stringify(cfg, null, 2) + ';\n'
    );
    "
			;;
	view-conf)
			log_daemon_msg "Configuración de EMA Libre Carpincho"
			log_daemon_msg "-------------------------------------"
			CFG=/usr/share/emalibre/conf/ConfiguracionGeneral.js
			if [ -f /etc/emalibre_modo ]
			then
				log_daemon_msg "Modo actual: `cat /etc/emalibre_modo` "
			else
				`echo "consola" > /etc/emalibre_modo`
				log_daemon_msg "Modo actual: `cat /etc/emalibre_modo` "
			fi
			log_daemon_msg "Inicio Automatico (servicio): `systemctl is-enabled emalibre 2> echo`"
			log_daemon_msg ""
			log_daemon_msg "----------------------"
			log_daemon_msg "Configuracion Global:"
			log_daemon_msg "->`grep "Version" /usr/share/emalibre/conf/ConfiguracionGlobal.js`"
			log_daemon_msg "->`grep "Nombre" /usr/share/emalibre/conf/ConfiguracionGlobal.js`"
			log_daemon_msg "----------------------"
			log_daemon_msg "Configuracion General:"
			log_daemon_msg ""
			CFG=/usr/share/emalibre/conf/ConfiguracionGeneral.js
			log_daemon_msg "-> Tiempo de Recolección: $(sed -nE 's/^[[:space:]]*"Tiempo_de_Recoleccion"[[:space:]]*:[[:space:]]*([0-9]+),?/\1/p' $CFG)"
			log_daemon_msg "-> UTC: $(sed -nE 's/^[[:space:]]*"UTC"[[:space:]]*:[[:space:]]*(-?[0-9]+),?/\1/p' $CFG)"
			log_daemon_msg "-> Sistema Métrico: $(sed -nE 's/^[[:space:]]*"SistemaMetrico"[[:space:]]*:[[:space:]]*"([^"]+)",?/\1/p' $CFG)"
			log_daemon_msg "-> Nivel Debug: $(sed -nE 's/^[[:space:]]*"debug"[[:space:]]*:[[:space:]]*([0-9]+),?/\1/p' $CFG)"
			log_daemon_msg "-> Tamaño Debug: $(sed -nE 's/^[[:space:]]*"debugTamanio"[[:space:]]*:[[:space:]]*([0-9]+),?/\1/p' $CFG)"
			log_daemon_msg "-> Nombre Estación: $(sed -nE 's/^[[:space:]]*"NombreEstacion"[[:space:]]*:[[:space:]]*"([^"]+)",?/\1/p' $CFG)"
			log_daemon_msg "-> Modo: $(sed -nE 's/^[[:space:]]*"Modo"[[:space:]]*:[[:space:]]*"([^"]+)",?/\1/p' $CFG)"
			log_daemon_msg "-> Llave R: $(sed -nE 's/^[[:space:]]*"Llave_R"[[:space:]]*:[[:space:]]*"([^"]+)",?/\1/p' $CFG)"
			log_daemon_msg "-> Inicio automático: $(sed -nE 's/^[[:space:]]*"inicio_automatico"[[:space:]]*:[[:space:]]*(true|false),?/\1/p' $CFG)"
			log_daemon_msg "-> Audio: $(sed -nE 's/^[[:space:]]*"Audio"[[:space:]]*:[[:space:]]*(true|false),?/\1/p' $CFG)"
			log_daemon_msg "-> Notificar cambios: $(sed -nE 's/^[[:space:]]*"notificar_cambios"[[:space:]]*:[[:space:]]*(true|false),?/\1/p' $CFG)"
			log_daemon_msg "-> Audio Voces: $(sed -nE 's/^[[:space:]]*"audioVoces"[[:space:]]*:[[:space:]]*"([^"]+)",?/\1/p' $CFG)"
			log_daemon_msg "-> IP: $(sed -nE 's/^[[:space:]]*"IP"[[:space:]]*:[[:space:]]*"([^"]+)",?/\1/p' $CFG)"
			log_daemon_msg "-> Puerto: $(sed -nE 's/^[[:space:]]*"Puerto"[[:space:]]*:[[:space:]]*"([^"]+)",?/\1/p' $CFG)"
			log_daemon_msg "-> Ruta: $(sed -nE 's/^[[:space:]]*"Ruta"[[:space:]]*:[[:space:]]*"([^"]+)",?/\1/p' $CFG)"
			;;
		*)
		echo "Utilice:  {start|stop|status|restart|set-inicio-enabled|set-inicio-disable|view-conf|reporte|uptime}"
		exit 1

		;;
	esac
fi

exit $RETVAL
