#!/bin/bash

cd /opt/wsysrt

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD

if [ -e /mnt/hidpart/Data/SystemPart.ini ]; then
	dos2unix /mnt/hidpart/Data/SystemPart.ini
fi

[ -e /tmp/startup_splash ] && echo "completed" > /tmp/startup_splash&

export MOUNTED_DEVICE="
<window title=\"搜索备份点\" icon-name=\"media-flash\">
<vbox>
	<text use-markup=\"True\" width-chars=\"56\">
		<label>\"
<b>从隐藏分区中自动搜索备份点</b>
\"
		</label>
	</text>
	<hbox>
		<button>
			<label>开始自动搜索备份点</label>
			<input file icon=\"folder-open\"></input>
			<action>(find /WINDOWS -maxdepth 2 -name \"*HIDDEN*SSC\"; find /WINDOWS -maxdepth 2 -name \"SSC-Backup\") > /tmp/BACKUP_POINT</action>
			<action type=\"closewindow\">MOUNTED_DEVICE</action>
		</button>
		<button>
			<label>关闭</label>
			<input file icon=\"gtk-close\"></input>
			<action type=\"closewindow\">MOUNTED_DEVICE</action>
		</button>
	</hbox>
</vbox>
</window>"

export HAVE_ONCE_RESTORE="
<window title=\"提示\" icon-name=\"media-flash\">
<vbox>
	<text use-markup=\"True\" width-chars=\"56\">
		<label>\"
<span><b>您在授权过期或授权不明的情况下，已经进行过1次系统恢复。</b></span>
<span><b>您需要正式激活系统备份与恢复工具，才能再应用系统恢复功能。</b></span>
\"
		</label>
	</text>
	<hbox>
		<button>
			<label>知道了！</label>
			<input file icon=\"gtk-close\"></input>
			<action type=\"closewindow\">exit</action>
		</button>
	</hbox>
</vbox>
</window>"

export EXPIRED="
<window title=\"提示\" width=\"100\" height=\"180\">
<vbox>
	<text use-markup=\"True\">
		<label>\"
<span><b>授权过期或授权不明。</b></span>
<span><b>您需要联系服务商，获取系统恢复的激活码，进行1次系统恢复；</b></span>
<span><b>系统恢复后，请正式激活系统备份与恢复工具。</b></span>
<span><b>输入激活码：</b></span>
\"
		</label>
	</text>
	<hbox>
		<entry>
			<default>\"\"</default>
			<variable>serialno_1</variable>
		</entry>
		<entry>
			<default>\"\"</default>
			<variable>serialno_2</variable>
		</entry>
		<entry>
			<default>\"\"</default>
			<variable>serialno_3</variable>
		</entry>
		<entry>
			<default>\"\"</default>
			<variable>serialno_4</variable>
		</entry>
		<entry>
			<default>\"\"</default>
			<variable>serialno_5</variable>
		</entry>
	</hbox>
	<hbox>
		<button>
			<label>确定</label>
			<input file icon=\"gtk-close\"></input>
			<action type=\"exit\">OK</action>
		</button>

		<button>
			<label>取消</label>
			<input file icon=\"gtk-close\"></input>
			<action type=\"closewindow\">exit</action>
		</button>
	</hbox>
</vbox>
</window>"

validate_linux_code()
{
NEED_TO_ENTER_VALIDATE_CODE=TRUE
while [ "$NEED_TO_ENTER_VALIDATE_CODE" = "TRUE" ]; do

	output=$(gtkdialog --center --program=EXPIRED)
	export $output

	if [ $EXIT != \"OK\" ]; then
		exit 0
	fi

	if [ $serialno_1 = \"11111\" -a $serialno_2 = \"22222\" -a $serialno_3 = \"55555\" -a $serialno_4 = \"44444\" -a $serialno_5 = \"33333\" ]; then
		echo "Linux Code Right"
		NEED_TO_ENTER_VALIDATE_CODE=FALSE
	else
		gmessage -center -buttons "" -nofocus -borderless -timeout 2 "激活码无效"
		NEED_TO_ENTER_VALIDATE_CODE=TRUE
	fi
done
}

grep "mediatype=livecd" /proc/cmdline 1>/dev/null 2>&1
IS_LIVECD=1

DATA_DIR="/WINDOWS"
if [ $IS_LIVECD -eq 0 ]; then
	#gtkdialog --center --program=MOUNTED_DEVICE
	gmessage -center -nofocus -borderless "正在硬盘中搜索备份点 请稍等..." -button "" -timeout 5&
	sleep 1
	echo "寻找备份点目录"
	(for dir in $(find /WINDOWS -maxdepth 2 -name "*HIDDEN*SSC"; find /WINDOWS -maxdepth 2 -name "SSC-Backup"); do find $dir/Data -maxdepth 2 -name wsysrt 2>/dev/null 1>/dev/null; if [ $? -eq 0 ]; then echo $dir; fi;done) > /tmp/BACKUP_POINT
	#cat /tmp/BACKUP_POINT
	
	cd /opt/wsysrt
	if [ ! -e /tmp/BACKUP_POINT ]; then
		exit 1
	fi
	
	FOUND_BACKUP_POINT="False"
	ONCE="False"
	
	for line in $(python ./find_bp.py); do
	export $line
	done
	
	echo $active_xml_path
	echo $bp_path
	DATA_DIR1=$active_xml_path
	DATA_DIR=$bp_path
	DIR=$mount_point
	if [ "$bp_path" != "" ]; then
		FOUND_BACKUP_POINT="True"
	fi
	
	echo 使用 $FOUND_BACKUP_POINT $DIR $DATA_DIR 下的备份点
	
	echo -e "\n进行授权验证"
	#gmessage -center -nofocus -borderless "正在进行授权验证 请稍等..." -button "" -timeout 5&
	#sleep 1
	
	#不存在授权文件
	if [ ! -e $DATA_DIR1/active.xml ]; then
		#检查是否存在已经恢复一次的标记文件
		if [ ! -e $DATA_DIR1/once.flg ]; then
			echo "不存在授权文件, 不存在ONCE文件，则可以进行一次还原"
			validate_linux_code
			ONCE="True"
		else
			echo "不存在授权文件, 存在ONCE文件，提示不可以进行还原，并Quit"
			gtkdialog --center --program=HAVE_ONCE_RESTORE
			exit 1
		fi
	else
		#存在授权文件
		#授权解密
		/root/utils/decrypt_active.sh $DATA_DIR1
		#取得过期日期
		AUTH_EXPIRED=$(./parse_active.py 1230D20A99E04B75AEDC0E0589C00F53)
		
		if [ "$AUTH_EXPIRED" = "True" ]; then
			if [ -e $DATA_DIR1/once.flg ]; then
				echo "存在授权文件, 过期, 并且已经还原过一次"
				gtkdialog --center --program=HAVE_ONCE_RESTORE
				exit 1
			else
				echo "存在授权文件, 过期, 还可以进行一次还原"
				validate_linux_code
				ONCE="True"
			fi		
		else
			echo "存在授权文件, 未过期"
			ONCE="False"
		fi
	fi
	
	if [ "$FOUND_BACKUP_POINT" = "True" ]; then
		echo "generate /BootDisk.ini"
		echo $DIR
		MOUNT_POINT=$(dirname $DIR)
		DEV_NODE=$(mount | grep $MOUNT_POINT | awk '{print $1}')
		BootDisk=$(echo $DEV_NODE | cut -c0-8)
		echo "[BootDisk]" > /BootDisk.ini
		echo "BootDisk=${BootDisk}" >> /BootDisk.ini
		echo "" >> /BootDisk.ini
		echo "[SysPart]" >> /BootDisk.ini
		echo "SysPart=${BootDisk}1" >> /BootDisk.ini
		
		cd /opt/wsysrt/
		unionctl /opt --add --before 0 --mode rw ${DATA_DIR}/../
	fi
	
	#killall gmessage 1>/dev/null 2>/dev/null
	export LD_LIBRARY_PATH=/opt/wsysrt/:$LD_LIBRARY_PATH
	#rm /tmp/BACKUP_POINT
	grep "mediatype=harddisk" /proc/cmdline 1>/dev/null 2>/dev/null
	if [ $? -eq 0 ]; then
		MEDIATYPE=harddisk
	else
		MEDIATYPE=livecd
	fi
	if [ -f /mnt/hidpart/Data/SystemPart.ini ]; then
	disk=$(grep "/dev/tmpfs/.hidpart" /proc/mounts | head -n 1 | awk '{print $1}' | tr -d "0-9")
	if [ "x$disk" != "x" ]; then
		./pywine.py $disk
	else
		./pywine.py /dev/sda
	fi
	fi
	[ $? -ne 1 ] && python /opt/wsysrt/client.py $DATA_DIR1 $ONCE $MEDIATYPE

else
	ONCE=False
	MEDIATYPE=harddisk
	if [ -f /mnt/hidpart/Data/SystemPart.ini ]; then
	disk=$(grep "/dev/tmpfs/.hidpart" /proc/mounts | head -n 1 | awk '{print $1}' | tr -d "0-9")
	if [ "x$disk" != "x" ]; then
		./pywine.py $disk
	else
		./pywine.py /dev/sda
	fi
	fi
	[ $? -ne 1 ] && python /opt/wsysrt/client.py /opt/wsysrt $ONCE $MEDIATYPE
fi

if [ "$FOUND_BACKUP_POINT" = "True" ]; then
	cd /opt/wsysrt/
	unionctl /opt --remove ${DATA_DIR}/../
fi
exit 0
