#!/bin/bash
#
# VERSION=16
# CHANGES="added resetfull+resetnetconf to args"

# global variables #
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/fallback
BEROCONF=/usr/fallback/beroconf
umask 077

# functions #
function log () {
	echo "[init_factoryreset] ${1}"
}

function cleanup_config () {
	log "Cleaning up ConfFS."
	rm -rf /usr/conf/*
}

function cleanup_app () {
	log "Cleaning up AppFS."
	mount -oremount,rw /usr/local 2> /dev/null
	rm -rf /usr/local/*
	sleep 1; sync; sync; sleep 1
	mount -oremount,ro /usr/local 2> /dev/null
}

function reset_root () {
	log "Resetting RootFS-Version."
	mount -oremount,rw / 2> /dev/null
	rm -rf /pkginfo
	sleep 1; sync; sync; sleep 1
	mount -oremount,ro / 2> /dev/null
}

function cleanup_userapp () {

	log "Cleaning up UserAppFS."
	mount -oremount,rw /home/admin > /dev/null
	rm -rf /home/admin/apps/*
	for i in $(ls /home/admin/www); do
		if [ -L /home/admin/www/${i} ]; then
			if [ "${i}" != "shared"] || [ "${i}" != "index.php" ]; then
				rm -rf /home/admin/www/${i}
			fi
		fi
	done
	sleep 1; sync; sync; sleep 1
	mount -oremount,ro /home/admin > /dev/null
}

function reset_netconf () {

	log "Resetting Network-Configuration."
	${BEROCONF} set root lan-dhcp 1 2> /dev/null
	${BEROCONF} set root beroAvahi-enabled 1 2> /dev/null
	${BEROCONF} delete root lan-ipaddr 2> /dev/null
	${BEROCONF} delete root lan-netmask 2> /dev/null
	${BEROCONF} delete root lan-gateway 2> /dev/null
	${BEROCONF} delete root disable_ncs 2> /dev/null
	${BEROCONF} delete root gateway-manual 2> /dev/null
	${BEROCONF} set root gateway-mode "eth0.10" 2> /dev/null
	${BEROCONF} set root nameserver-mode "eth0.10" 2> /dev/null
	${BEROCONF} set root lan-nameserver "8.8.8.8;8.8.4.4" 2> /dev/null
	${BEROCONF} set root lan-mtu 1500 2> /dev/null
	${BEROCONF} set root ntphost pool.ntp.org 2> /dev/null

	/usr/fallback/update-interfaces
}

function reset_full () {

	log "Performing Full-Reset."
	cleanup_config
	cleanup_userapp
	cleanup_app
	reset_root
	touch /usr/conf/need_red_activate
}

function reset_jumper () {

	if [ "$(${BEROCONF} get root boot_recoverymode | grep -v failed)" = "1" ]; then
		log "Booting in recovery-mode"
		touch /tmp/enable_recovery
		/usr/bin/env -i bash -c "/usr/php/backupManagement.php create" > /dev/null
		return
	fi

	if [ "$(${BEROCONF} get root boot_skipReset | grep -v failed)" = "1" ]; then
		log "Skip Recovery Mode only once and boot normally"
		${BEROCONF} delete root boot_skipReset
		return
	fi

	if [ ! -f /sys/class/beronet/gateway/resetjumper ]; then
		log "Reset-Pins: undefined."
		return
	fi

	if [ "$(cat /sys/class/beronet/gateway/resetjumper)" -eq "0" ]; then
		log "Reset-Pins: open."
		return
	fi

	log "Reset-Pins: closed."
	touch /tmp/enable_recovery
	${BEROCONF} set root boot_recoverymode 1
	#reset_full
	/usr/bin/env -i bash -c "/usr/php/backupManagement.php create" > /dev/null
	reset_netconf
}

# main #
case "${1}" in
	start)
		reset_jumper
		;;
	full-reset)
		reset_full
		;;
	full-reset-netconf)
		reset_full
		reset_netconf
		;;
	*)
		echo "Usage: ${0} {start|full-reset|full-reset-netconf}" >&2
		exit 1
esac

exit 0
