#!/usr/bin/env bash

err() {
	errpre=""
	errpost=""
	if test -t 1; then
    ncolors=$(tput colors)
		if test -n "$ncolors" && test "$ncolors" -ge 8; then
			errpre="$(tput setaf 1)"
			errpost="$(tput setaf 7)"
		fi
	fi
	>&2 echo "${errpre}ERROR: $*${errpost}"; usage; exit 1
}

warn() {
	pre=""
	post=""
	if test -t 1; then
    ncolors=$(tput colors)
		if test -n "$ncolors" && test "$ncolors" -ge 8; then
			pre="$(tput setaf 3)"
			post="$(tput setaf 7)"
		fi
	fi
	>&2 echo "${pre}WARNING: $*${post}"
}

usage() { >&2 cat <<USAGEDOC
usage:
	email-via-mailgun-smtp [recipient] [subject] [username] [password] <<< 'Hello, world!'

email-via-mailgun-smtp will read all the input from stdin and use the contents as the body of the email.
recipient will default to DEFAULT_MAILGUN_SMTP_RECIPIENT if not set
username will default to DEFAULT_MAILGUN_SMTP_USERNAME if not set
password will default to DEFAULT_MAILGUN_SMTP_PASSWORD if not set
subject will default to DEFAULT_MAILGUN_SMTP_SUBJECT if not set
USAGEDOC
}

recipient="${1:-$DEFAULT_MAILGUN_SMTP_RECIPIENT}"; shift
[[ -z $recipient ]] && err 'No recipient provided.'

subject="${1:-$DEFAULT_MAILGUN_SMTP_SUBJECT}"; shift
[[ -z $subject ]] && warn 'No subject provided. Leaving blank.'

username="${1:-$DEFAULT_MAILGUN_SMTP_USERNAME}"; shift
[[ -z $username ]] && err 'No username provided.'

password="${1:-$DEFAULT_MAILGUN_SMTP_PASSWORD}"; shift
[[ -z $password ]] && err 'No password provided.'

warn "Reading email body from stdin..."

body=""
while read -r line; do
	body="${body}\n${line}"
done

[[ -z $body ]] && err 'Body was blank.'

echo "Recipient: $recipient"

>&2 echo "Finished reading body. Sending email..."

swaks --auth \
	--server smtp.mailgun.org \
	--au "$username" \
	--ap "$password" \
	--to "$recipient" \
	--h-Subject: "$subject" \
	--body "$body"