#!/bin/sh

FLASH_TYPE=
IS_UBIFS=
PARTITION_NVDATA=nvdata
PARTITION_BOOT_PARA=boot_para
PARTITION_USER_DATA=user_data

get_flash_type() {
	if [ -n "$(cat /proc/partitions 2>/dev/null | grep mtd)" ]; then
		echo "nand"
	elif [ -n "$(cat /proc/partitions 2>/dev/null | grep mmcblk)" ]; then
		echo "emmc"
	fi
}

is_ubifs() {
	if [ -n "$(cat /etc/fstab 2>/dev/null | grep ubifs)" ]; then
		echo "1"
	else
		echo "0"
	fi
}

erase_ubifs() {
	local path="$(cat /etc/mtab | grep "/$1 " | cut -d ' ' -f 2)"
	local dev="$(cat /etc/fstab | grep "/$1 " | cut -d ' ' -f 1)"
	echo "unmount path=$path, erase dev=$dev"
	if [ -n "$path" ]; then
		umount $path
		status=$?
		[ $status -eq 0 ] && echo "umount $path success" || echo "umount $path failed $status"
	fi
	ubiupdatevol $dev -t
	status=$?
	[ $status -eq 0 ] && echo "ubiupdatevol $dev success" || echo "ubiupdatevol $dev fail $status"
}

erase_partition() {
	echo "Erasing $1 partition"
	if [[ $FLASH_TYPE == "nand" ]]; then
		if [ "$IS_UBIFS" = "1" ] && [ "$1" = "$PARTITION_NVDATA" -o "$1" = "$PARTITION_USER_DATA" ]; then
			local folder_name=$1
			if [ "$folder_name" = "user_data" ]; then
				folder_name="data"
			fi
			erase_ubifs $folder_name
		else
			local path="$(cat /etc/mtab | grep "/$1 " | cut -d ' ' -f 2)"
			if [ -n "$path" ]; then
				umount $path
				status=$?
				[ $status -eq 0 ] && echo "umount $path success" || echo "umount $path failed $status"
			fi
			mtd erase $1
			status=$?
			[ $status -eq 0 ] && echo "mtd erase $1 success" || echo "mtd erase $1 fail $status"
		fi
	elif [[ $FLASH_TYPE == "emmc" ]]; then
		local path="$(cat /etc/mtab | grep "/$1 " | cut -d ' ' -f 2)"
		if [ -n "$path" ]; then
			umount $path
			status=$?
			[ $status -eq 0 ] && echo "umount $path success" || echo "umount $path failed $status"
		fi
		dd if=/dev/zero of=/dev/block/$1 bs=1M > /dev/null 2>&1
	fi
}

FLASH_TYPE=$(get_flash_type)
IS_UBIFS=$(is_ubifs)
echo "FLASH_TYPE=$FLASH_TYPE, IS_UBIFS=$IS_UBIFS"
erase_partition $PARTITION_NVDATA
erase_partition $PARTITION_BOOT_PARA
# erase_partition $PARTITION_USER_DATA

/sbin/jffs2reset $@
