#!/bin/bash

sleep 5
chvt 10
setterm -powersave off -blank 0

# Asegurar que de que exista el directorio para guardar las imagenes
mkdir -p /home/partimag

# Constantes de Dialog
: ${DIALOG_OK=0}
: ${DIALOG_CANCEL=1}
: ${DIALOG_HELP=2}
: ${DIALOG_EXTRA=3}
: ${DIALOG_ITEM_HELP=4}
: ${DIALOG_ESC=255}

if [ -z $DIALOGRC ]; then
    DIALOGRC=/etc/huayra/dialogrc
fi
export DIALOGRC

if [ -z $ADV_MENU_FILE ]; then
       ADV_MENU_FILE=/usr/share/huayra-recovery/huayra-recovery-adv
fi
export ADV_MENU_FILE

if [ -z $DEBUG ]; then
    DEBUG=0
fi
export DEBUG

if [ -z $CONECTADO ]; then
    CONECTADO=0
fi
export CONECTADO

# Particiones para guardar/recuperar
PARTS_WIN="sda2 sda3 sda5"
PARTS_HUAYRA="sda1 sda3"
export PARTS_WIN
export PARTS_HAUYRA

# root donde se encuentra Huayra instalado (para eliminar temporales)
ROOT_HUAYRA="/dev/sda1"
export ROOT_HUAYRA

EFI_PART="/dev/sda3"
export EFI_PART

# permite sobreescribir las variables usadas desde el archivo de config
if [ -f /etc/default/huayra-recovery ]; then
	source /etc/default/huayra-recovery
fi

#
# iniciar y detectar el cargador
#
function inicio 
{
	salir=0

	acpi -a|grep -i "on-line"
	AC_ON=$?
	
	if [ $CONECTADO == 1 ]; then

		AC_ON=0
	fi

	if [ $AC_ON == 0 ]; then
		menu_principal
	fi

	while [[ $AC_ON != 0  && $salir != 1 ]]; do

		acpi -a|grep -i "on-line"
		AC_ON=$?
		
		if [ $CONECTADO == 1 ]; then
			AC_ON=0
		fi
		
		exec 3>&1
		result=$(dialog --ok-label "Reintentar" \
		--backtitle "..:: \Z3Sistema de Recuperación\Zn ::.." \
		--colors \
		--title " \Z3AVISO IMPORTANTE\Zn " \
		--yesno "No se encontró el cargador conectado a la netbook. \n\nPor favor, conecte el equipo a la \Z3red eléctrica\Zn para continuar. \n\n¿Desea reintentar?"  0 0 \
		2>&1 1>&3)

		return_value=$?
		exec 3>&-

		case $return_value in
		  $DIALOG_OK)
			if [ $AC_ON == 0 ];then
				menu_principal
			fi
			;;
		  $DIALOG_CANCEL)
			salir=1
			;;
		  $DIALOG_ESC)
			salir=1
			;;
		esac
	done

	salir
}

# Menu de incio de opciones
function menu_principal
{
	exec 3>&1
	if [ $ADV_MENU = 1 ]; then
		result=$(dialog --nocancel --ok-label "Aceptar" \
			--default-item "X" --backtitle "..:: \Z3Sistema de Recuperación\Zn ::.." \
			--colors \
			--title " \Z3Elija la tarea a realizar\Zn " \
			--menu  "" 14 50  7\
			"1" "Restaurar Microsoft Windows 8.1"  \
			"2" "Restaurar Huayra GNU/linux" \
			"3" "Restaurar ambos Sistemas Operativos"  \
			"4" "Verificar particiones"  \
			"" "-----------------------------------" \
			"5" "Menu Avanzado" \
			"X" "Salir" 2>&1 1>&3)
	
	else
		result=$(dialog --nocancel --ok-label "Aceptar" \
			--default-item "X" --backtitle "..:: \Z3Sistema de Recuperación\Zn ::.." \
			--colors \
			--title " \Z3Elija la tarea a realizar\Zn " \
			--menu  "" 14 50  7\
			"1" "Restaurar Microsoft Windows 8.1"  \
			"2" "Restaurar Huayra GNU/linux" \
			"3" "Restaurar ambos Sistemas Operativos"  \
			"4" "Verificar particiones"  \
			"" "-----------------------------------" \
			"X" "Salir" 2>&1 1>&3)

	fi
	return_value=$?
	exec 3>&-

	case $return_value in
	  $DIALOG_OK)
		case $result in
			1)
				restaurar_windows
			;;
			2)
				restaurar_huayra
			;;
			3)
				restaurar_ambos
			;;
			"")
				menu_principal
			;;
			4)
				verificar_particiones
			;;
			5)
				source $ADV_MENU_FILE
				menu_avanzado
			;;
			X)
				salir
			;;
		esac
		;;
	  $DIALOG_CANCEL)
		salir=1
		;;
	  $DIALOG_ESC)
		salir=1
		;;
	esac
	
 	
}

# Poweroff!
function salir
{
	dialog \
        --backtitle "..:: \Z3Sistema de Recuperación\Zn ::.." \
		--colors \
		--title " \Z3AVISO IMPORTANTE\Zn " \
		--msgbox "El equipo se apagará" 5 40
		
	if [ $DEBUG == 1 ]; then
		dialog --title "Debug" --msgbox "Poweroff" 0 0
	else 
		poweroff
	fi
	exit 0

}

# Mensaje de bienvenida
function saludo
{

	exec 3>&1
	result=$(dialog --ok-label "Aceptar" \
        --backtitle "..:: \Z3Sistema de Recuperación\Zn ::.." \
        --title " \Z3AVISO IMPORTANTE\Zn " \
        --colors \
	--defaultno \
        --yesno  "Mediante esta herramienta, Usted puede restaurar las particiones de los Sistemas Operativos a las imágenes oririginales de fábrica. \n\nLa información que se encuentre en la particion de DATOS \Z3no será modificada\Zn. \nSin embargo, cualquier dato que haya sido guardado en las particiones de los Sistemas Operativos \Z3se perderá definitivamente\Zn.\n\n¿Desea continuar?" 0 0 2>&1 1>&3)

	return_value=$?
	exec 3>&-

	case $return_value in
	  $DIALOG_OK)
		;;
	  $DIALOG_CANCEL)
		salir
		;;
	  $DIALOG_ESC)
		salir
		;;
	esac
       
}

# Restaurar la imagen de Huayra
function restaurar_huayra
{
	exec 3>&1
	result=$(dialog \
        --backtitle "..:: \Z3Sistema de Recuperación\Zn ::.." \
		--colors \
		--title " \Z3RESTAURAR HUAYRA GNU/Linux\Zn " \
		--yesno "Se va a restaurar el Sistema Operativo Huayra GNU/Linux a la imágen original de fábrica. \n\nLa información que se encuentre en la partición de DATOS no será modificada. \n\n¿Desea continuar?" 12 50 2>&1 1>&3)

	return_value=$?
	exec 3>&-

	case $return_value in
	  $DIALOG_OK)
		if [ $DEBUG == 1 ]; then
			dialog --title "Debug" \
			--msgbox "ocs-sr -g auto -e1 auto -e2 -b -r -j2 -k -p true restoreparts huayra-img $PARTS_HUAYRA" 0 0
		else
			efi_umount
			ocs-sr -g auto -e1 auto -e2 -b -r -j2 -k -p true restoreparts huayra-img $PARTS_HUAYRA
		fi
		
		;;
	  $DIALOG_CANCEL)
		inicio
		;;
	  $DIALOG_ESC)
		inicio
		;;
	esac

}

# Restaurar la imagen de Windows
function restaurar_windows
{
	exec 3>&1
	result=$(dialog \
        --backtitle "..:: \Z3Sistema de Recuperación\Zn ::.." \
		--colors \
		--title " \Z3RESTAURAR WINDOWS\Zn " \
		--yesno "Se va a restaurar el Sistema Operativo Windows a la imágen original de fábrica. \n\nLa información que se encuentre en la partición de DATOS no será modificada. \n\n¿Desea continuar?" 12 50 2>&1 1>&3)

	return_value=$?
	exec 3>&-

	case $return_value in
	  $DIALOG_OK)
		if [ $DEBUG == 1 ]; then
			dialog --title "Debug" \
				--msgbox "ocs-sr -g auto -e1 auto -e2 -b -r -j2 -k -p true restoreparts windows-img $PARTS_WIN" 0 0
		else
			efi_umount
			ocs-sr -g auto -e1 auto -e2 -b -r -j2 -k -p true restoreparts windows-img $PARTS_WIN
		fi
		;;
	  $DIALOG_CANCEL)
		inicio
		;;
	  $DIALOG_ESC)
		inicio
		;;
	esac

}

# Restaurar ambas imagenes de los sistemas operativos
function restaurar_ambos
{
	exec 3>&1
	result=$(dialog \
        --backtitle "..:: \Z3Sistema de Recuperación\Zn ::.." \
		--colors \
		--title " \Z3RESTAURAR AMBOS SISTEMAS\Zn " \
		--yesno "Se van a restaurar los Sistemas Operativos Huayra GNU/Linux y Windows a la imágen original de fábrica. \n\nLa información que se encuentre en la partición de DATOS no será modificada. \n\n¿Desea continuar?" 12 50 2>&1 1>&3)

	return_value=$?
	exec 3>&-

	case $return_value in
	  $DIALOG_OK)
		if [ $DEBUG == 1 ]; then
			dialog --title "Debug" \
				--msgbox "ocs-sr -g auto -e1 auto -e2 -b -r -j2 -k -p true restoreparts huayra-img $PARTS_HUAYRA\n\nocs-sr -g auto -e1 auto -e2 -b -r -j2 -k -p true restoreparts windows-img $PARTS_WIN" 0 0
		else
			efi_umount
			ocs-sr -g auto -e1 auto -e2 -b -r -j2 -k -p true restoreparts huayra-img $PARTS_HUAYRA
			ocs-sr -g auto -e1 auto -e2 -b -r -j2 -k -p true restoreparts windows-img $PARTS_WIN
		fi
		;;
	  $DIALOG_CANCEL)
		inicio
		;;
	  $DIALOG_ESC)
		inicio
		;;
	esac

}

function verificar_particiones 
{
	exec 3>&1
	result=$(dialog \
        --backtitle "..:: \Z3Sistema de Recuperación\Zn ::.." \
		--colors \
		--title " \Z3VERIFICAR PARTICONES\Zn " \
		--yesno "Se van a verificar las particiones de los Sistemas Operativos Huayra GNU/Linux y Windows (fsck y ntfsfix) para corregir errores comunes. \n\n¿Desea continuar?" 12 50 2>&1 1>&3)

	return_value=$?
	exec 3>&-

	case $return_value in
	  $DIALOG_OK)
		if [ $DEBUG == 1 ]; then
			dialog --title "Debug" \
				--msgbox "fsck $ROOT_HUAYRA\nntfsfix /dev/sda5 /dev/sda8 /dev/sda9" 0 0
		else
			fsck $ROOT_HUAYRA
			
			for p in /dev/sda5 /dev/sda8 /dev/sda9
			do
				ntfsfix $p
			done
		fi
		pause 'Presione [ENTER] para continuar...'
		inicio
		;;
	  $DIALOG_CANCEL)
		inicio
		;;
	  $DIALOG_ESC)
		inicio
		;;
	esac
	
}
# Desmonta la particion EFI si estámontada para poder restaurar o guardar
function efi_umount
{
	if grep -qs $EFI_PART /proc/mounts; then
		umount $EFI_PART
	fi	
}

function pause 
{
    read -p "$*"
}
## main
## mostrar intro
saludo
inicio
