#!/bin/bash

mount | grep overlay | grep " / " > /dev/null
if [[ $? -ne 0 ]];then
    echo "system is not in overlay mode, can not backup os"
    exit 1
fi

if [[ ! -e /.overlayup ]];then
    echo "/.overlayup directory do not exist, exception"
    exit 1
fi

SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
source ${SHELL_FOLDER}/osbackuputils

backup_name=
backup_desc=
for para in "$@";do
    case $para in 
        --name=*)
            backup_name="${para#*=}"
            ;;
        --desc=*)
            backup_desc="${para#*=}"
            ;;
    esac
done

# 得到用户输入的备份描述信息
if [[ "$backup_name" != "" ]];then
  if_name_new $backup_name
  if [[ $? -eq 0 ]];then
      echo "    this name exists:$backup_name, invalid"
      exit 1
  fi
else
  while true;do
    echo -n "please input the name of the backup:"
    read line
    if [[ -z $line ]];then
        echo "    empty, invalid"
    else
        if_name_new $line
        if [[ $? -eq 0 ]];then
            echo "    this name exists, invalid"
        else
            backup_name=$line
            break
        fi
    fi
  done
fi

# 得到用户输入的备份描述信息
if [[ "$backup_desc" != "" ]];then
  if_name_new $backup_desc
  if [[ $? -eq 0 ]];then
      echo "    this desc exists:$backup_desc, invalid"
      exit 1
  fi
else
  while true;do
    echo -n "please input the description of the backup:"
    read line
    if [[ -z $line ]];then
        echo "    empty, invalid"
    else
        if_desc_new $line
        if [[ $? -eq 0 ]];then
            echo "    this description exists, invalid"
        else
            backup_desc=$line
            break
        fi
    fi
  done
fi

get_overlayx
oldoverlayx=$?
# 如果当前系统是运行在某个还原点之上，在这个还原点的基础上做还原点，则这个点之后的还原点都会失效，删除掉
if [[ $oldoverlayx -gt 0 ]];then 
	files=`ls /.overlayup/`
	for file in $files;do
		if [[ ${file:0:4} == "name" && ! $file == "name" && ${file:4} -gt $oldoverlayx ]];then
			rm -rf /.overlayup/$file
		fi
		if [[ ${file:0:4} == "desc" && ! $file == "desc" && ${file:4} -gt $oldoverlayx ]];then
			rm -rf /.overlayup/$file
		fi
		if [[ ${file:0:4} == "time" && ! $file == "time" && ${file:4} -gt $oldoverlayx ]];then
			rm -rf /.overlayup/$file
		fi
		# rm time file
		if [[ ${file:0:5} == "upper" && ! $file == "upper" && ${file:5} -gt $oldoverlayx ]];then
			rm -rf /.overlayup/$file
		fi
		if [[ ${file:0:10} == "upper_boot" && ! $file == "upper_boot" && ${file:10} -gt $oldoverlayx ]];then
			rm -rf /.overlayup/$file
		fi
	done
fi

get_backup_index
backup_index=$?
let backup_index=backup_index+1

echo $backup_name > /.overlayup/name$backup_index
echo $backup_desc > /.overlayup/desc$backup_index
backup_time=$(date "+%Y-%m-%d_%H:%M:%S")
echo $backup_time > /.overlayup/time$backup_index
cp -aR /.overlayup/upper_now /.overlayup/upper$backup_index

mount | grep overlay | grep " /boot " > /dev/null
if [[ $? -eq 0 ]];then
    cp -aR /.overlayup/upper_boot_now /.overlayup/upper_boot$backup_index
fi

set_overlayx $backup_index
if [[ $? -ne 0 ]];then 
	echo " *** critical error, set backup point to grub.cfg failed *** "
fi

echo "backup os succeed"
echo ""

bash ${SHELL_FOLDER}/osbackuplist
