#!/usr/bin/env bash

# We want to catch any unexpected failure, and exit immediately
set -e

# Download helper for wget, to be called from the download wrapper script
#
# Options:
#   -q          Be quiet.
#   -o FILE     Save into file FILE.
#   -f FILENAME The filename of the tarball to get at URL
#   -u URL      Download file at URL.
#   -e ENCODE   Tell wget to urlencode the filename passed to it
#
# Environment:
#   WGET     : the wget command to call

quiet=
while getopts "${BR_BACKEND_DL_GETOPTS}" OPT; do
    case "${OPT}" in
    q)  quiet=-q;;
    o)  output="${OPTARG}";;
    f)  filename="${OPTARG}";;
    u)  url="${OPTARG}";;
    e)  encode="-e";;
    :)  printf "option '%s' expects a mandatory argument\n" "${OPTARG}"; exit 1;;
    \?) printf "unknown option '%s'\n" "${OPTARG}" >&2; exit 1;;
    esac
done

shift $((OPTIND-1)) # Get rid of our options

# Caller needs to single-quote its arguments to prevent them from
# being expanded a second time (in case there are spaces in them)
_wget() {
    if [ -z "${quiet}" ]; then
        printf '%s ' ${WGET} "${@}"; printf '\n'
    fi
    _plain_wget "$@"
}
# Note: please keep command below aligned with what is printed above
_plain_wget() {
    eval ${WGET} "${@}"
}

# Replace every '?' with '%3F' in the filename; only for the PRIMARY and BACKUP
# mirror
[ -n "${encode}" ] && filename=${filename//\?/%3F}

_wget ${quiet} "${@}" -O "'${output}'" "'${url}/${filename}'"
