#!/bin/bash
set -e

# Get script name
SCRIPT=$(basename "$0")
VERSION="1.0.0"

# Display Help
Help() {
    echo
    echo "$SCRIPT"
    echo
    echo "Description: Restore docker volumes."
    echo "Syntax: $SCRIPT [-v|-f|-V|help]"
    echo "Example: $SCRIPT -v postgres_data01 -f /var/tmp/postgres_data01.tar"
    echo "options:"
    echo "  -v    Volume name. Defaults to tar file name."
    echo "  -f    Path to tar file."
    echo "  -V    Show $SCRIPT version."
    echo "  help  Show $SCRIPT manual."
    echo
}

# Show help and exit
if [[ "$1" == "help" ]]; then
    Help
    exit
fi

# Process params
while getopts ":v: :f:" opt; do
    case $opt in
        v) VOLUME="$OPTARG";;
        f) FILE="$OPTARG";;
        V) echo "$SCRIPT version $VERSION"
        exit 0
        ;;
        \?) echo "Invalid option -$OPTARG" >&2
        Help
        exit;;
    esac
done

# Verify variables
[[ -z "$FILE" ]] && { echo "Parameter -f|filename is empty" ; exit 1; }

# Fallback to environment vars and default values
FILENAME=$(basename -- "$FILE")
DIR=$(dirname "$FILE")
: ${VOLUME:="${FILENAME%%.*}"}

# Warning
echo "Make sure to stop the attached containers before running the restore."

# Restore dump for volume
echo "Run restore $DIR/$FILENAME to Docker volume $VOLUME ..."
docker run --rm -v $VOLUME:/_data -v ${DIR}:/restore ubuntu bash -c "cd /_data && rm -rf ./* && tar xvf /restore/$FILENAME --strip 1"

# Notify if restore has finished
echo "The Docker volume restore has finished."
