#! /bin/bash

function log() {
	D=`date +"%Y-%m-%d %H:%M:%S" `
	echo "$D $*"
	echo "$D $*" >>$LOGFILE
}

PACKAGE="smartlock-premise"
SMARTLOCK_DIR="/home/root/node_production_app/node_modules/smartlock/"
HOME_ST_DIR="/home/st"
FROM_DIR="/var/lib/$PACKAGE/data"
LOGFILE="/home/st/$PACKAGE.log"
SAVEDIR="/home/st/smartlock-premise-save"
# ~/Parmalat/smartlock/-etc-sudoers 

function checkinst() {
	#TURNPARMA=`dpkg -l | grep $PACKAGE | wc -l`
	TURNPARMA=`grep ON_PREMISE /home/st/cfg_dominio.json | wc -l`

	#if [ "$TURNPARMA" -lt 1 -a "0" = "1" ]
	if [ "$TURNPARMA" -lt 1 ]
	then 
		# log "package $PACKAGE not installed"
		return 1
	else 	
		# log "package $PACKAGE installed"
		return 0
	fi
}

function help () {
	log "$PACKAGE installer help"
	log " -s/status     display status of package"
	log " -i/install    install package"
	log " -r/remove     remove package"
	log " -f/force      force reinstall package files"
	log " -h/--help     this help"
}

function remember () {
	log "$PACKAGE remember to restart smartlock_mon either by reboot or by systemctl restart "
}

function create_savedir () {
	log "$PACKAGE creating savedir"	
	if [ ! -d "$SAVEDIR" ]
	then	
		mkdir -p "$SAVEDIR"
	else
		log "$PACKAGE savedir exist"
	fi	

}

function save_files () {
	create_savedir

	log "$PACKAGE  save files"

	cp "$SMARTLOCK_DIR"/package.json          "$SAVEDIR"/
	cp "$SMARTLOCK_DIR"/TurnstyleMain.js      "$SAVEDIR"/
	cp --  /etc/sudoers                       "$SAVEDIR"/-etc-sudoers-support
	cp --  /etc/shutdown.allow                "$SAVEDIR"/-etc-shutdown.allow-support 
	cp "$HOME_ST_DIR"/config_ipcheck.json     "$SAVEDIR"/
	cp "$HOME_ST_DIR"/cfg_dominio.json     	  "$SAVEDIR"/
	if [ -s "$HOME_ST_DIR"/stconfig.json ]
	then 
		cp "$HOME_ST_DIR"/stconfig.json       "$SAVEDIR"/
	else
		touch "$SAVEDIR"/stconfig.json			# empty file means NO FILE TO SAVE
	fi
	if [ -s "$HOME_ST_DIR"/stconfigfix.json ]
	then 
		cp "$HOME_ST_DIR"/stconfigfix.json   "$SAVEDIR"/
	else
		touch "$SAVEDIR"/stconfigfix.json     # empty file means NO FILE TO SAVE
	fi	
}

			
function save_files_not_saved () {
	create_savedir

	log "$PACKAGE save unsaved files"

	# copia di nuovo i file di installazione da FROM_DIR
	# invece non salva di nuovo i fila da HOME_ST_DIR perchè sono stati quelli modificati dall'installazione
	# si può controllare che il file su HOME_ST_DIR sia stato modificato con diff
	# se il file è stato modificato allora lo copia da FROM_DIR
	# se il file non è stato modificato allora non lo copia da FROM_DIR
	# in questo modo si evita di copiare file che non sono stati modificati


	if ! diff "$FROM_DIR"/package.json          "$SAVEDIR"/package.json                >/dev/null
	then
		cp "$FROM_DIR"/package.json             "$SAVEDIR"/
		log "$PACKAGE saved ""$FROM_DIR"/package.json
	fi

	if ! diff "$SMARTLOCK_DIR"/TurnstyleMain.js  "$SAVEDIR"/TurnstyleMain.js            >/dev/null 
	then
		cp "$SMARTLOCK_DIR"/TurnstyleMain.js       "$SAVEDIR"/
		log "$PACKAGE saved ""$SMARTLOCK_DIR"/TurnstyleMain.js		
 	fi

 	if ! diff /etc/sudoers                     "$SAVEDIR"/-etc-sudoers-support        >/dev/null
    then 		
 		cp /etc/sudoers                        "$SAVEDIR"/-etc-sudoers-support
		log "$PACKAGE saved "/etc/sudoers
 	fi
	if ! diff /etc/shutdown.allow         	   "$SAVEDIR"/-etc-shutdown.allow-support >/dev/null
    then		
		cp /etc/shutdown.allow            	   "$SAVEDIR"/-etc-shutdown.allow-support 
		log "$PACKAGE saved "/etc/shutdown.allow
	fi
	if ! diff "$HOME_ST_DIR"/config_ipcheck.json  "$SAVEDIR"/config_ipcheck.json
    then		
		cp "$HOME_ST_DIR"/config_ipcheck.json    "$SAVEDIR"/
		log "$PACKAGE saved ""$HOME_ST_DIR"/config_ipcheck.json	
	fi
	if ! diff "$HOME_ST_DIR"/cfg_dominio.json  "$SAVEDIR"/cfg_dominio.json
    then		
		cp "$HOME_ST_DIR"/cfg_dominio.json    "$SAVEDIR"/
		log "$PACKAGE saved ""$HOME_ST_DIR"/cfg_dominio.json
	fi
	sed -i 's/ON_PREMISE/passy/g' "$SAVEDIR"/cfg_dominio.json 2>/dev/null

	if [ -f "$HOME_ST_DIR"/stconfig.json ]
	then
		if ! diff "$HOME_ST_DIR"/stconfig.json     "$SAVEDIR"/stconfig.json
		then
			cp "$HOME_ST_DIR"/stconfig.json        "$SAVEDIR"/
			log "$PACKAGE saved ""$HOME_ST_DIR"/stconfig.json 		
		fi		
	fi
	if [ -f "$HOME_ST_DIR"/stconfigfix.json ]
	then 
		cp "$HOME_ST_DIR"/stconfigfix.json     "$SAVEDIR"/
		log "$PACKAGE saved ""$HOME_ST_DIR"/stconfigfix.json 				
	fi	
}


function protectdir () {
	log "$PACKAGE protect smartlockdir"
	chmod 750 "$SMARTLOCK_DIR"
	log "$PACKAGE grant access to /home/st"
	chmod a+rwx "$HOME_ST_DIR" "$HOME_ST_DIR"/*
}

function copy_files () {
	log "$PACKAGE copy new files"

	cp "$FROM_DIR"/package.json                   "$SMARTLOCK_DIR"/
	cp "$FROM_DIR"/TurnstyleMainForParmalat.js    "$SMARTLOCK_DIR"/
	cp -- "$FROM_DIR"/-etc-sudoers-support        /etc/sudoers
	cp -- "$FROM_DIR"/-etc-shutdown.allow-support /etc/shutdown.allow          
	cp "$FROM_DIR"/config_ipcheck.json           "$HOME_ST_DIR"/
	cp "$FROM_DIR"/cfg_dominio.json              "$HOME_ST_DIR"/
	cp "$FROM_DIR"/stconfig.json                 "$HOME_ST_DIR"/
	cp "$FROM_DIR"/stconfigfix.json              "$HOME_ST_DIR"/

	log "$PACKAGE unprotect $HOME_ST_DIR/stconfig\*"
  chmod a+rw "$HOME_ST_DIR"/stconfig*
}

function revert_files () {
	log "$PACKAGE revert files"

	cp "$SAVEDIR"/package.json          			"$SMARTLOCK_DIR"/
	cp "$SAVEDIR"/TurnstyleMain.js	         		"$SMARTLOCK_DIR"/
	cp --  "$SAVEDIR"/-etc-sudoers-support           /etc/sudoers
	cp --  "$SAVEDIR"/-etc-shutdown.allow-support    /etc/shutdown.allow
	cp "$SAVEDIR"/config_ipcheck.json   			"$HOME_ST_DIR"/
	cp "$SAVEDIR"/cfg_dominio.json     				"$HOME_ST_DIR"/
	if [ -s "$SAVEDIR"/stconfig.json ]
	then 
		cp "$SAVEDIR"/stconfig.json      			"$HOME_ST_DIR"/	
	else
		rm "$HOME_ST_DIR"/stconfig.json				# empty file means NO FILE --> rm file
	fi	
	if [ -s "$SAVEDIR"/stconfigfix.json ]
	then 
		cp "$SAVEDIR"/stconfigfix.json   			"$HOME_ST_DIR"/
	else
		rm "$HOME_ST_DIR"/stconfigfix.json			# empty file means NO FILE --> rm file		
	fi	
}

function remove_files () {
	log "$PACKAGE remove files"

	rm "$SMARTLOCK_DIR"/TurnstyleMainForParmalat.js    
	rm -rf "$SAVEDIR"
}

function create_user () {
	log "$PACKAGE insert user support + activate in system files"
	useradd -m support
	echo 'support:Support.:1234!' | chpasswd -c SHA512
}

function remove_user () {
	log "$PACKAGE remove user support"

	userdel -f support
}


MODE=""
if [ "$1" == "-i" -o "$1" == "install" ]
then
	MODE="install"
else
	if [ "$1" == "-r" -o "$1" == "remove" ]
	then
		MODE="remove"
	else
		if [ "$1" == "-f" -o "$1" == "force" ]
		then
			MODE="force"
		else
			if [ "$1" == "-s" -o "$1" == "status" -o "$1" = "" ]
			then
				MODE="status"
				if checkinst 
				then
					log "$PACKAGE installed and active"
					exit 0
				else
					log "$PACKAGE NOT installed NOT active"
					exit 1
				fi
			else
				if [ "$1" == "-h" -o "$1" == "--help" ]
				then
					help
					exit 0
				else
					log "$PACKAGE installer mode '$1' unknown"
					help
					exit 1
				fi
			fi
		fi
	fi
fi 

log "$PACKAGE mantainer start : $MODE"


case $MODE in
install)
	if ! checkinst 
	then
		log "$PACKAGE is to be installed"			
		save_files
		protectdir
		copy_files
		create_user
		remember
	else
		log "$PACKAGE is already installed use -f to reinstall files"			
	fi	
  ;;

remove)
	if checkinst 
	then
		log "$PACKAGE will be removed"			
		revert_files
		remove_files
		remove_user
		# remove user ?
		log "$PACKAGE files reverted to orginal"
		remember
	else
		log "$PACKAGE is not installed"
	fi
	;;		


force)
	if checkinst
	then
		log "$PACKAGE file will be reinstalled "
		protectdir
		copy_files	
		remember
		# remove user ?
	else
		log "$PACKAGE is not installed"
	fi
	;;

*)
  log "$PACKAGE MODE $MODE error"
  exit 1
esac


log "$PACKAGE mantainer end"

