#!/bin/bash

if ! curl --max-time 1 -s -I localhost/setting >/dev/null 2>&1; then
	$(realpath $0).js "$@"
	exit $?
fi

NAME=""
ACCEPT="application/json"
NONEWLINE="false"
DEFAULT=""
ACTION=""

while [ $# != 0 ]; do
	case "$1" in
		--sh) ACCEPT="application/sh"
				shift
				;;
		--bc) ACCEPT="application/bash-completion"
				shift
				;;
		-n) NONEWLINE="true"
				shift
				;;
		-d) DEFAULT="$2"
				shift 2
				;;
		-h) ACTION="help"
				break
				;;
		 *)
		 		if [ "$ACTION" ]; then
			 		NAME="$1"
					NAME=${NAME//[/\\[}
					NAME=${NAME//]/\\]}
			 		shift
					break
				else
					ACTION="$1"
					shift
				fi
	esac
done

if [ "$ACTION" != get -a ! "$NAME" ]; then
	ACTION="help"
fi

TOKEN=$(cat $(curl -s localhost/setting/auth.tokenfile) 2>/dev/null)

case "$ACTION" in
	get)
		curl -s -X GET "localhost/setting/$NAME" -u "root:$TOKEN" -H "No-Newline: $NONEWLINE" -H "Default-Value: $DEFAULT" -H "Content-Type: application/json" -H "Accept: $ACCEPT"
		;;
	call)
		ARGS=""; while [ $# != 0 ]; do ARGS="$ARGS${ARGS:+,} \"$1\""; shift; done
		curl -s -X POST "localhost/setting/$NAME" -u "root:$TOKEN" -d "[$ARGS]" -H "No-Newline: $NONEWLINE" -H "Default-Value: $DEFAULT" -H "Content-Type: application/json" -H "Accept: $ACCEPT"
		;;
	set)
		curl -s -X PUT "localhost/setting/$NAME" -u "root:$TOKEN" -d "$1" -H "Content-Type: application/json"
		;;
	unset)
		curl -s -X DELETE "localhost/setting/$NAME" -u "root:$TOKEN"
		;;
	*)
		echo "Usage: $0 get [--sh] [-n] [-d DEFAULT_VALUE] [NAME]" >&2
		echo "  or:  $0 call [--sh] [-n] [-d DEFAULT_VALUE] NAME [ARGUMENTS...]" >&2
		echo "  or:  $0 set NAME VALUE" >&2
		echo "  or:  $0 unset NAME" >&2
    exit 1
esac
