#!/bin/bash

set -e
set -o pipefail

errx() {
    echo "$@" >&2
    exit 1
}

warn() {
    echo "$@" >&2
}

if [ $# -ne 3 ]; then
    echo "Usage:"
    echo $(basename "$0") "<username> <volume name> <date>"
    exit 1
fi

requser="$1"
volname="$2"
restdate="$3"

getent passwd $requser
pts exa $requser

qartmp=$(mktemp /tmp/q-ar-out-XXXXXX)

/opt/tivoli/tsm/client/ba/bin/dsmc q ar /var/tsm/afsbackup/$volname.\* >$qartmp

restfinc=$(fgrep <$qartmp "$restdate Never"|tail -1|awk '{print $5}')
if [ -z "$restfinc" ]; then
    echo >&2 "No backup available from that date. Available backups are:"
    cat >&2 $qartmp
    rm $qartmp
    echo >&2 "Please choose another date."
    exit 1
fi
restfbase=$(sed <<<"$restfinc" 's,\.\([0-9]\{8\}\)\.[0-9]\{8\}$,.00000000.\1,;')

rm $qartmp

if [ -e "$restfinc" ]; then
    errx "Another backup/restore of $restfinc in progress."
fi
if [ -e "$restfbase" ]; then
    errx "Another backup/restore of $restfbase in progress."
fi

/opt/tivoli/tsm/client/ba/bin/dsmc ret $restfinc $restfinc.restore
/opt/tivoli/tsm/client/ba/bin/dsmc ret $restfbase $restfbase.restore

cd /afs/kth.se/bakrestores
mkdir -p $requser
cd $requser
fs sa . system:anyuser none
fs sa . $requser rl

restid=$(mktemp -d restore.XXXXXX)
cd $restid
echo "requser=$requser volname=$volname restdate=$restdate" >info.txt

vos restore -server afsfs-1.sys.kth.se -part a -name $restid.nobup -file $restfbase.restore -localauth
rm $restfbase.restore
vos restore -server afsfs-1.sys.kth.se -part a -name $restid.nobup -file $restfinc.restore -overwrite incremental -localauth
rm $restfinc.restore

fs mkm mnt $restid.nobup

cd mnt
touch ../ok

echo "Restore done. Files are here:"
/bin/pwd
