#!/usr/bin/env sh

. /usr/local/share/vulture/helpers.sh

#############
# variables #
#############
backup_name=""
interactive=1

#############
# functions #
#############
usage() {
    /bin/echo "USAGE restore <backup name>"
    /bin/echo "This command restores a mongodb backup"
    /bin/echo ""
    exit 1
}

finalize_early() {
    # shellcheck disable=SC2317
    finalize 1 "Stopped"
}

finalize() {
    err_code=$1
    err_message=$2
    error_and_exit "${err_code}" "$err_message"
}

########
# main #
########
trap finalize_early INT

while getopts 'yh' opt; do
    case "${opt}" in
        y)  interactive=0;
            ;;
        h|*)  usage;
            ;;
    esac
done
shift $((OPTIND-1))

COMMAND="$(/usr/bin/command -v mongorestore)"
TLS_PARAMS="$(get_tls_params "${COMMAND}")"
URI="$(get_uri)"

if [ -z "${COMMAND}" ]; then
    finalize 1 "mongodb-tools not installed in jail!"
fi

backup_name="$1"

[ -n "$backup_name" ] || finalize 1 "Missing backup name!"
[ -d "${BACKUP_PATH}/${backup_name}" ] || finalize 1 "Unknown backup ${backup_name}!"

if [ $interactive -eq 1 ]; then
    /bin/echo "Dry run:"
    $COMMAND $TLS_PARAMS --dryRun --oplogReplay --dir="${BACKUP_PATH:?}/${backup_name}/" "$URI" || finalize 1 "Error(s) while running dry run"
    /usr/bin/printf "Action will drop all collections to rollback to previous state, do you want to apply? (y/N)"
    read -r _answer
    case "${_answer}" in
        [Nn][Oo]|[Nn]|"")
            finalize 1 "Cancelled."
            ;;
        [Yy][Ee][Ss]|[Yy])
            /bin/echo "Running rollback..."
            ;;
    esac
fi

$COMMAND $TLS_PARAMS --objcheck --drop --quiet --oplogReplay --dir="${BACKUP_PATH:?}/${backup_name}/" "mongodb://$URI" || finalize 1 "Error(s) while rollbackint to backup"
/bin/echo "Rollback complete!"

finalize 0
