#!/bin/bash

# import functions library
source rescue_common

tmpdir="/tmp/flash-rescue-root"
rootdir="$tmpdir/pen"

function prepare() {

    mkdir -p $rootdir

    if ! mount_usbroot $rootdir; then
        return 1
    fi

    if [ x"$version" = x"1.0" ]; then
        mkdir -p $tmpdir/shared
        if ! mount_sharedroot $tmpdir/shared; then
            return 1
        fi
    fi

    return 0
}

function doit() {

    if [ ! -d $dir ]; then
        echo
        echo "Can't find a backup directory in the Share partition"
        echo
        return 0
    fi

    cd $dir
    i=1
    for file in $(ls -c1 backup-*.bz2 2> /dev/null | sort -r | head -10); do
            files[$i]="$file"
            let i++
    done
    cd - > /dev/null

    if [ $i -eq 1 ]; then
        echo
        echo 'No backup files found!'
        echo
        return 0
    fi

    while [ true ]; do

        clear
        echo
        echo "The following backup files were found:"
        echo

        i=1
        while [ -n "${files[$i]}" ]; do
            echo "[$i] ${files[$i]}"
            let i++
        done
        let i--
        echo
        echo '[0] Cancel / Return to main menu'

        echo
        echo 'Select from the list above, the file that you want to restore.'
        echo 'The most recent files come first in the list.'
        echo
        echo -n "What backup file do you want to restore? [1] "
        read option

        if [ -z "$option" ]; then
            option=1
        fi
        if [ x"$option" = x"0" ]; then
            return 0
        fi

        if [ ! -f $dir/${files[$option]} ]; then
            echo
            echo "Error reading backup file ${files[$option]}!"
            echo
            echo -n 'Do you want to restore another backup file? [N/y] '
            read confirm

            if [ x"$confirm" = x"y" -o x"$confirm" = x"Y" ]; then
                continue
            else
                return 0
            fi
        else

            echo
            echo -n 'Restoring backup file. This can take some time:  '

            bunzip2 -c $dir/${files[$option]} > $loop \
                2> /tmp/rescue-backup.err &

            sleep 2

            while ps | grep -q bunzip2; do
                progress
            done

            sync
            echo
            echo

            errsize=$(ls -la /tmp/rescue-backup.err | cut -d' ' -f5)
            if [ $errsize -ne 0 ]; then
                echo 'Error restoring user files!'
                echo
                return 1
            else
                echo 'Backup file restored!'
                echo
                break
            fi
        fi
    done

    return 0
}

function cleanup() {

    if [ x"$version" = x"1.0" ]; then
        umount $tmpdir/shared > /dev/null 2>&1
        rmdir $tmpdir/shared 2> /dev/null
    fi

    umount $rootdir > /dev/null 2>&1
    rmdir $rootdir $tmpdir 2> /dev/null

    return 0
}

clear
trap cleanup SIGINT

version=""
if ! insert_pendrive; then
    exit 1
fi

if [ x"$version" = x"1.0" ]; then
    dir="$tmpdir/shared/backup"
    loop="$rootdir/loopbacks/system.loop"
else
    dir="$rootdir/backup"
    loop="$rootdir/.loopbacks/system.loop"
fi

if ! prepare; then
    cleanup
    exit 1
fi

if ! doit; then
    cleanup
    exit 1
fi

cleanup
exit 0