#!/bin/sh

_csa_part=`mount | grep csa | awk '{print $3}'`
_bak_path="/opt/system/csa"
_bak_end="$_bak_path/.backup_end"
_log_file="$_bak_path/.log"
_src_stamp="$_csa_part/.backup_stamp"

chk_must_have () {
	_must_have="$_csa_part/nv/nvdata.bin"

	for file in $_must_have; do
		if [ ! -e $file ]; then
			return 1
		fi
	done
	return 0
}

do_backup () {
	# wait for making nv data
	sleep 60
	for i in 10 20 30; do
		chk_must_have
		if [ $? -eq 0 ]; then
			break
		fi
		sleep $i
	done

	chk_must_have
	if [ $? -ne 0 ]; then
		echo "$file does not exist." >> $_log_file
		date >> $_log_file
		exit 1
	fi

	cp -rf $_csa_part ${_bak_path%/csa}
	echo "Success CSA backup!!!"
	echo "Success CSA backup!!!" > $_log_file
	date >> $_log_file
	touch $_src_stamp
	sync
	mount | grep csa > $_bak_end
}

do_restore () {
	if [ "z$_bak_path" == "z" ]; then
		mkdir -p $_bak_path
		echo "Failed to restore CSA, no backup data" >> $_log_file
		date >> $_log_file
		exit 1
	fi

	_csa_dev=`mount | grep csa | awk '{print $1}'`
	if [ $_csa_dev ]; then
		# CSA partition is mounted but we don't trust it. Clean up
		umount $_csa_part
		if [ -e $_csa_dev ]; then
			dd if=/dev/zero of=$_csa_dev bs=1024 count=1024
		fi
	fi
	# format and mount csa partition
	/usr/bin/mount_slp.sh -f csa
	cp -rf $_bak_path ${_csa_part%csa}

	echo "Success to restore CSA"
	echo "Success to restore CSA" >> $_log_file
	date >> $_log_file
	touch $_src_stamp
	sync
}

do_mount () {
	if [ "z$_csa_part" == "z" ]; then
		/usr/bin/mount_slp.sh -f csa
		_csa_part=`mount | grep csa | awk '{print $3}'`
		_src_stamp="$_csa_part/.backup_stamp"

		chk_must_have
		if [[ "$?" == "0" && -e $_src_stamp ]]; then
			echo "CSA is mounted and seems normal."
			echo "Don't restore CSA"
			echo "[modem power on]"
			echo on > /sys/devices/platform/modemctl/exec_util
		else
			do_restore
			echo "[modem power on]"
			echo on > /sys/devices/platform/modemctl/exec_util
			exit 1
		fi

	else
		echo "CSA is already mounted.."
		mount | grep csa
	fi
}

do_start () {
	mkdir -p $_bak_path
	if [ ! -e $_bak_path ]; then
		echo "There is no available backup dir, $_bak_path"
		exit 1
	fi

	if [ ! -e "$_bak_end" ]; then
		$0 backup &
	fi
}

case "$1" in
	start)
		do_start
		;;
	backup)
		do_backup
		;;
	restore)
		do_restore
		;;
	mount)
		do_mount
		;;
	*)
		echo "Usage: $0 start | backup | restore | mount"
esac

exit 0

