#!/bin/sh

prog=${0##*/}
usage() {
	cat <<-EOF
		usage: wget [-cqS] [--spider] [-O FILE] [-o LOGFILE] [--header STR]
			[--post-data STR | --post-file FILE] [-Y on/off]
			[-P DIR] [-U AGENT] [-T SEC] URL...

		Retrieve files via HTTP or FTP

			--spider	Only check URL existence: \$? is 0 if exists
			--header STR	Add STR (of form 'header: value') to headers
			--post-data STR	Send STR using POST method
			--post-file FILE	Send FILE using POST method
			-c		Continue retrieval of aborted transfer
			-q		Quiet
			-P DIR		Save to DIR (default .)
			-S		Show server response
			-T SEC		Network read timeout is SEC seconds
			-O FILE		Save to FILE ('-' for stdout)
			-o LOGFILE	Log messages to FILE
			-U STR		Use STR for User-Agent header
			-Y on/off	Use proxy
	EOF
	exit $1
}

msg() {
	if ! [ -n "$quiet" ]; then
		# busybox wget sends to stderr
		echo "$@" >&2
	fi
}

OPTS=$(getopt -l quiet,help,header:,output-document:,spider,timeout:,tries: -o "qhO:T:t:" -n $prog -- "$@") || usage "1" >&2

quiet=
eval set -- "$OPTS"
while true; do
	opt="$1"
	case "$opt" in
		-h|--help)
			usage 0
			;;
		-q|--quiet)
			quiet=1
			;;
		--header) shift;;
		--spider)
			exit ${SPIDER_STATUS:-0}
			;;
		-O|--output-document)
			shift
			outfile="$1"
			;;
		-T|--timeout) shift;;
		-t|--tries) shift;;
		--)
			shift
			break
			;;
		*) usage "1" >&2
			;;
	esac
	shift
done

if [ $# -eq 0 ]; then
	usage "1" >&2
fi

for url; do
	case "$url" in
		"") msg "bad address"; exit 1;;
		*fail*) msg "bad address"; exit 1;;
		*404*) msg "wget: server returned error: HTTP/1.1 404 Not Found"; exit 1;;
	esac
done

url_no_scheme="${url#*://}"
case "$url_no_scheme" in
	*/*) host="${url_no_scheme%%/*}"; path="/${url_no_scheme#*/}";;
	*) host="$url_no_scheme"; path=/;;
esac
path="${path#${WGET_STRIP_PREFIX:-/}}"
path="${path%\?*}"
[ -n "$WGET_HOST_LOG" ] && echo "$host" >> "$WGET_HOST_LOG"
case "$host" in
	\[*\]:*) yaml_host="${host#\[}"; yaml_host="${yaml_host%%\]*}";;
	\[*\]) yaml_host="${host#\[}"; yaml_host="${yaml_host%\]}";;
	*) yaml_host="$host";;
esac


if [ -z "$WGETCONTENT" ]; then
	# Scaleway has all the data on a single TXT endpoint
	if [ "$CLOUD" = "scaleway" ]; then
		cat "${WGET_YAML:-$host.txt}"
	else
		(
		IFS=/
		set -- ${path#/}
		yx -f "${WGET_YAML:-$yaml_host.yaml}" "$@" 2>/dev/null
		)
	fi
fi

: "${outfile:=index.html}"
case "$outfile" in
	-)	msg "writing to stdout"
		echo "$WGETCONTENT"
		;;
	*)	msg "saving to '$outfile'"
		echo "$WGETCONTENT" > "$outfile"
		;;
esac
