#!/bin/bash

# FIXME: include common functions from smartlock-upd package



exec 6>&1                       # Link file descriptor #6 with stdout.
                                # Saves stdout.
exec >>/dev/null 2>&1           # output to null
source /usr/bin/UPDATEcommon.sh
log_init /home/st/smartcheck.log 
exec 1>&6 6>&-                  # Restore stdout and close file descriptor #6.


function errorcheck( ){
	if [ "$GLOBAL_ERROR" = "" ]
	then
		GLOBAL_ERROR=`echo $1|awk -F ';' {' print $1 '}`
		GLOBAL_ERRORDESC="$1"
	else
		GLOBAL_ERROR="255"
		GLOBAL_ERRORDESC="$GLOBAL_ERRODESC \n $1"	
	fi
}


function errordisplay () {
	if [ "$GLOBAL_ERROR" != "" ]
	then
		echo "Error : $GLOBAL_ERRORDESC"
		exit $GLOBAL_ERROR	
	fi
}


function help() {
	echo "smartcheck param :"
	echo "          no param    all check"
	echo "          serial      show  serial  "
	echo "          dominio     show  dominio  "
	echo "          passy       show  passy components version"
	echo "          update      check update firmware (error rc : 65 ENOPKG	Package not installed) "
	echo "          config      check config          (error rc : 65 ENOPKG	Package not installed) "
	echo "          turn        show  turnstyle module version                                      "
	echo "          net         check update firmware (error rc : 65 ENOPKG	Package not installed) "
	echo "          stato       check update firmware (error rc : 65 ENOPKG	Package not installed) "
	echo "          cert        check cert "
	echo ""
}

function param () {
	if [ "$#" -lt 1 ]
	then
		COMANDO=""
		return
	else
		PARAM_ERR=0
		COMANDO="$1"
		COMANDO="${COMANDO,,}"
		for CM in $COMANDI
		do
			# echo "$CM = $COMANDO"
		 	if [ "$CM" = "$COMANDO" ]
			then
				MODE="$CM"
				echo "checking $MODE.."
				PARAM_ERR=1
				break
			fi
		done
		if [ "$PARAM_ERR" == "0" ]
		then
			help
			exit 1
		fi
	fi
}


smartcheck_serial() { 
echo ""
echo "Serial : "
echo "---------------------------------"
echo "`cat /factory/serial_number`"
}

smartcheck_dominio() { 
echo ""
echo "Dominio : "
echo "---------------------------------"
echo `grep \"dominio\" /home/st/cfg_dominio.json | awk -F \" {' print $4 '}`
}

smartcheck_passy() {
package_list | grep -e smartlock -e passy >$TMPFILE
echo ""
echo "Passy installed versions : "
echo "---------------------------------"
cat $TMPFILE
META_PASSY_VER=`cat $TMPFILE | grep  meta-passy | awk '{ print $3 }' `            ; export META_PASSY_VER
#PASSY_VER=`cat $TMPFILE      | grep  passy | grep -v meta-passy | awk '{ print $3 }' ` ; export PASSY_VER
PASSY_VER=`cat $TMPFILE      | grep  passy-app  | awk '{ print $3 }' ` ; export PASSY_VER
}

smartcheck_update() {
export STATE=`dpkg-query -f '${status} ${package}\n' -W |  grep -e passy-app -e smartlock  | awk '$3 != "installed" {print $0}' `
echo ""
echo "Passy update : "
echo "---------------------------------"
if  [ "$STATE" != "" ]
then
	echo "install problem for passy-app  : $PASSY_VER"
	echo "$STATE"
	ERROR_DESC="65; installation / update not correct"
	errorcheck "$ERROR_DESC"
else
	echo "Correctly installed passy-app $PASSY_VER"
fi
}

smartcheck_config() {
CONFIG_VER=`jsonpar.py -p version` ; export CONFIG_VER
CONFIG_CRE=`jsonpar.py -p creationTime` ; export CONFIG_CRE
echo ""
echo "Config : "
echo "---------------------------------"
echo "version $CONFIG_VER "
echo "created $CONFIG_CRE "
if [ -f /home/st/sconfigfix.json ]
then
	echo "stconfigfix ACTIVE"
else
	echo "stconfigfix NOT_PRESENT"
fi
}

smartcheck_turn() {
TURNSTYLE_VER=`jsonpar.py -p version -f /home/root/node_production_app/node_modules/smartlock/package.json` ; export TURNSTYLE_VER
echo ""
echo "Turnstyle : "
echo "---------------------------------"
echo "version package : $TURNSTYLE_VER "
}


smartcheck_net() {
echo ""
echo "Net configuration : "
echo "---------------------------------"
CONN_ETH=`jsonpar.py -p eth_enabled -f /home/st/configured_cfg_net.json`
if [ "$CONN_ETH" = "true" ]
then
	echo "Connection : Ethernet "
else
	CONN_WIFI=`jsonpar.py -p wifi_enabled -f /home/st/configured_cfg_net.json`
	if [ "$CONN_WIFI" = "true" ]
	then
		echo "Connection : WIFI "
		WIFI_NAME=`iwgetid wlan0 --raw` ; export WIFI_NAME
		echo "Active SSID: $WIFI_NAME "
	else
		echo "Connection : NONE (ERROR)"
	fi
fi

echo "Ip         : `/lib/systemd/system/smartlock_mon.service/iface.py`"
SMARTDNS=`smartdns`
if [ "$?" = 0 ]
then
  echo "DNS CONFIG : $SMARTDNS"
else
  echo ""
  echo "Net anomalies : "
  echo "---------------------------------"
  echo "WARNING WARNING WANING   Net anomaly, checking ...."
  SMARTDNS=`smartdns -d INFO`
  echo "Anomalies report : $SMARTDNS"
  ERROR_DESC= "10 ; Anomalies report : $SMARTDNS"
  errorcheck "$ERROR_DESC"
  echo ""
fi  
}

smartcheck_stato() {
echo ""
echo "Smartlock status : "
echo "---------------------------------"
echo "Smartlock_mon : `systemctl is-active smartlock_mon ` "
echo "Smartlock     : `systemctl is-active smartlock `     "
echo "Smartlock_mux : `systemctl is-active smartlock_mux ` "
}

smartcheck_cert () {
echo ""
echo "Certificate status : "
echo "---------------------------------"
echo "`statoCert | awk '{for (i=4;i<=NF;i++)  printf $i""FS; print "" }'`"
}


smartcheck_repo () {
echo ""
echo "Repository : "
echo "---------------------------------"
echo "`smartrepo`"
}

GLOBAL_ERROR=""
COMANDI="dominio passy update config net repo turn stato certi serial"
TMPFILE=/tmp/$$.file ; export TMPFILE

param  $1

echo ""
echo "+--------------------------------------+"
echo "| S M A R T C H E C K      (-h = help) |"
echo "+--------------------------------------+"

case $COMANDO in
	"" )
		smartcheck_serial
		smartcheck_dominio
		smartcheck_passy
		smartcheck_update
		smartcheck_config
		smartcheck_net
		smartcheck_repo
		smartcheck_turn
		smartcheck_stato
		smartcheck_cert
		;;
	dominio    )
		smartcheck_dominio
		;;	
	passy      )
		smartcheck_passy
		;;	
	update     )
		smartcheck_update
		;;	
	config     )
		smartcheck_config
		;;	
	net        )
		smartcheck_net
		;;	
	repo        )
		smartcheck_repo
		;;	
	turn       )
		smartcheck_turn
		;;	
	stato     )
		smartcheck_stato
		;;	
	cert     )
		smartcheck_cert
		;;	
	serial   )
		smartcheck_serial
		;;	
	*)
		;;
esac


echo "" 

errordisplay

if [ -f $TMPFILE ] ; then rm $TMPFILE ; fi

