#!/bin/sh
# @fx - exchange rates between USD, EUR, PLN and THB (no arguments)
#
# One keyless request to open.er-api.com (base USD); the six cross-rates
# are derived from it. JSON is parsed with awk so no 'jq' is needed.

json=$(curl -fsS --max-time 8 "https://open.er-api.com/v6/latest/USD" \
       | tr -d '\n\r') || { echo "fx: rate lookup failed"; exit 1; }

case "$json" in
	*'"result":"success"'*) ;;
	*) echo "fx: rate service returned an error"; exit 1 ;;
esac

printf '%s' "$json" | awk '
function rate(cur,   s) {
	if (match($0, "\"" cur "\":[0-9.]+")) {
		s = substr($0, RSTART, RLENGTH)
		sub(/^.*:/, "", s)
		return s + 0
	}
	return -1
}
{
	e = rate("EUR"); p = rate("PLN"); t = rate("THB")
	if (e <= 0 || p <= 0 || t <= 0) {
		print "fx: incomplete rate data"
		exit 1
	}
	if (match($0, /"time_last_update_utc":"[^"]*"/)) {
		d = substr($0, RSTART, RLENGTH)
		sub(/^.*:"/, "", d)
		sub(/"$/, "", d)
		split(d, w, " ")
		print "FX rates " w[1] " " w[2] " " w[3] " " w[4]
	}
	printf "1 USD = %.4g EUR\n", e
	printf "1 USD = %.4g PLN\n", p
	printf "1 USD = %.4g THB\n", t
	printf "1 EUR = %.4g PLN\n", p / e
	printf "1 EUR = %.4g THB\n", t / e
	printf "1 PLN = %.4g THB\n", t / p
}
'
