#!/bin/sh

COMMAND=$1
PARAMETER=$2
PARAMETER2=$3

if [ "$COMMAND" = "backup" ]
then
	DATA_SPACE=`df | grep /data | awk '{print $4}'`
	if [ $DATA_SPACE -eq 0 ]
	then
		echo "Data partition full, can not create local backup."
		exit 0
	fi
	CONFIG_COUNT=`ls -1 /data/config_backup | grep tar.gz | wc -l`
	#echo "[debug]CONFIG_COUNT=" $CONFIG_COUNT
	if [ $CONFIG_COUNT -ge 20 ]
	then
		echo "Max 20 config backups, can not create local backup."
		exit 0
	fi
	BACKUP_CONTENT="/etc/persistence/config /www/langs /etc/persistence/data/ipsec.d/ /etc/persistence/data/rev"
	DATE_STRING=`date +"%Y%m%d-%H%M%S"`
	DATE_STRING2=`date +"%F %T"`
	VERSION_STRING=`cat /etc/version | sed '1d' | sed '2,4d'`
	if [ "$PARAMETER" = "auto" ]
	then
		BACKUP_FILE_NAME=autobackup-$DATE_STRING-$VERSION_STRING
		COMMENT_STRING="Automatic backup"
	else
		BACKUP_FILE_NAME=backup-$DATE_STRING-$VERSION_STRING
		COMMENT_STRING=$PARAMETER
	fi
	echo "Starting backup ..."
	tar -zcf /data/config_backup/$BACKUP_FILE_NAME.tar.gz $BACKUP_CONTENT
	touch /data/config_backup/$BACKUP_FILE_NAME.txt
	echo "Name:" $BACKUP_FILE_NAME > /data/config_backup/$BACKUP_FILE_NAME.txt
	echo "Model: Vigor3900" >> /data/config_backup/$BACKUP_FILE_NAME.txt
	echo "Created time:" $DATE_STRING2 >> /data/config_backup/$BACKUP_FILE_NAME.txt
	echo "Firmware version:" $VERSION_STRING >> /data/config_backup/$BACKUP_FILE_NAME.txt
	echo "Comment:" $COMMENT_STRING >> /data/config_backup/$BACKUP_FILE_NAME.txt
	echo "Backup created."
	exit 0
fi

if [ "$COMMAND" = "restore" ]
then
	if [ -f /data/config_backup/$PARAMETER.tar.gz ]
	then
		echo "Start restoring configuration ..."
		tar -zxf /data/config_backup/$PARAMETER.tar.gz -C /
		echo "Restore OK"
	else
		echo "Wrong file name"
	fi	
	exit 0
fi

if [ "$COMMAND" = "list" ]
then
	CONFIG_COUNT=`ls -1 /data/config_backup | grep tar.gz | wc -l`
	if [ "$CONFIG_COUNT" -gt 0 ]
	then
		echo "Total" $CONFIG_COUNT "backup configuration(s)."
		echo "List of local backup configuration(s):"
		echo ""
		COUNTER=1
		while [ "$CONFIG_COUNT" -gt 0 ]
		do
			CONFIG_FILE_NAME=`ls -1 /data/config_backup | grep txt | head -n $COUNTER | tail -n 1`
			cat /data/config_backup/$CONFIG_FILE_NAME
			echo ""
			COUNTER=$(($COUNTER+1))
			CONFIG_COUNT=$(($CONFIG_COUNT-1))
		done
	else
		echo "No local configuration backup."
	fi
	exit 0
fi

if [ "$COMMAND" = "upload" ]
then
	echo "upload"
	cd /tmp/config_backup
	tftp -g -l cfg.tar.gz -r $PARAMETER $PARAMETER2 >/dev/null 2>&1
	[ -f /tmp/config_backup/cfg.tar.gz ] || {
		echo "can not get config file from TFTP server, abort."
		exit 1
	}
	
	exit 0
fi

if [ "$COMMAND" = "download" ]
then
	echo "download"
	cd /tmp/config_backup
	tftp -p -l $PARAMETER $PARAMETER2 >/dev/null 2>&1
	exit 0
fi

if [ "$COMMAND" = "delete" ]
then
	if [ -f /data/config_backup/$PARAMETER.tar.gz ]
	then
		echo "Start deleting configuration ..."
		rm -f /data/config_backup/$PARAMETER.tar.gz
		echo "Delete OK"
	else
		echo "No such backup name."
	fi
	if [ -f /data/config_backup/$PARAMETER.txt ]
	then
		rm -f /data/config_backup/$PARAMETER.txt
	fi
	exit 0
fi
