#!/bin/sh

. /lib/functions.sh

do_xiaoqiang_defaults() {
	cat /usr/share/xiaoqiang/xiaoqiang-defaults.txt | while read line
	do
	        nvram set "$line"
	done
}


do_nvram_corrupt() {
	cat /usr/share/xiaoqiang/xiaoqiang-defaults.txt | while read line
	do
		nvram set "$line"
	done
}

do_flag_override() {
	local flag="$1"
	b_val=`bdata get $flag`
	n_val=`nvram get $flag`
	[ "$b_val" = "$n_val" ] && return 0
	[ "$b_val" = "1" ] && nvram set "$flag"=1
}

flag_override() {
	do_flag_override uart_en
	do_flag_override ssh_en
	do_flag_override telnet_en
	do_flag_override boot_wait
}

do_set_default_ssid() {
	num=`nvram get wl1_ssid | cut -b 8-11`
	temp=0x"$num"
	newnum="000"`printf "%x\n" $((0xffff-$temp))`
	pos=`expr length $newnum - 4`
	newnum=`echo ${newnum:$pos:4} | tr [a-z] [A-Z]`
	ssid2G=`nvram get wl1_ssid`
	result2G=`echo $ssid2G"_"$newnum`
	nvram set wl1_ssid=$result2G

	has5G=`uci get misc.wireless.if_5G 2>/dev/null`

    # D01 2/5G same ssid
    suf="_5G"
    model="`cat /proc/xiaoqiang/model`"
    [ "$model" = "D01" ] && {
        suf=""
    }

	if [ -n "$has5G" ]; then
		ssid5G=`nvram get wl0_ssid | cut -b -11`
		result5G=`echo ${ssid5G}"_"${newnum}${suf}`
		nvram set wl0_ssid=$result5G
	fi
}


restore_nvram () {
	restore=`nvram get restore_defaults`
	if [ "$restore" = "1" ]; then
		flag_name=`uci get misc.mount_bind_etc.flag_name`
		nvram set $flag_name=1
		mtd erase overlay
		rec_mtd=$(find_mtd_part cfg_bak)
		[ -n "$rec_mtd" ] && mtd erase cfg_bak
	fi

	ft_mode=`cat /proc/xiaoqiang/ft_mode`
	if [ "$ft_mode" != "1" ]; then
		sn=`nvram get SN`
		wl1_ssid=`nvram get wl1_ssid`
		countrycode=`nvram get CountryCode`
		if [ -z "$sn" -o -z "$wl1_ssid" -o -z "$countrycode" ]; then
			nvram_corrupt=1
		fi
	fi

	# skip restore wifi radio flag from defaults if factory mode
	if [ "$ft_mode" = "1" ]; then
		wl1_val=`nvram get wl1_radio`
		wl0_val=`nvram get wl0_radio`
	fi

	#restore: 1, 恢复出厂设置；2，ota升级
	#nvram_corrupt: 1, nvram被破坏
	if [ "$nvram_corrupt" = "1"  ]; then
		do_nvram_corrupt
		bdata sync
		nvram set nvram_corrupt=1
	fi

	# restore to factory setting
	if [ "$restore" = "1" ]; then
		nvram unset nvram_corrupt
		nvram clear /usr/share/xiaoqiang/xiaoqiang-reserved.txt
		do_xiaoqiang_defaults
		bdata sync
		do_set_default_ssid
	fi

	# OTA upgrade
	if [ "$restore" = "2" ]; then
		do_xiaoqiang_defaults
		flag_override
	fi

	if [ "$ft_mode" = "1" ]; then
		[  "$wl1_val" != "" -a -n "$wl1_val" ] && nvram set wl1_radio=$wl1_val
		[  "$wl0_val" != "" -a -n "$wl0_val" ] && nvram set wl0_radio=$wl0_val
	fi

	nvram commit
}

boot_hook_add preinit_main restore_nvram
