#!/bin/sh

NTPD_CONF="/etc/ntpd.conf"

_()
{
LANG=${in_language%%;*}.utf8 gettext "alterator-openntpd" "$1"
}

#turn off auto expansion
set -f

. /usr/share/alterator/build/backend3.sh

on_message()
{
	case "$in_action" in
		constraints)
			echo '('
    			printf 'name (required %s label "%s"  match ("^[[:alnum:].]+$"  "%s"))' \
			    "$([ "$in_orig_action" = "new" ] && echo "#t" || echo "#f")" \
			    "`_ "NTP server"`" \
			    "`_ "invalid server name"`"
			printf 'accept (label "%s" default #f)' "`_ "accept NTP clients"`"
			echo ')'
			;;
		list)
			echo '('
			case "$in__objects" in 
			    servers)
			    sed -rn '/^server[[:space:]]/ {s,^server[[:space:]]+([^[:space:]]+).*,("\1"),;p}' "$NTPD_CONF"
			    ;;
			    pools)
			    sed -rn '/^servers[[:space:]]/ {s,^servers[[:space:]]+([^[:space:]]+).*,("\1"),;p}' "$NTPD_CONF"
			    ;;
			esac
			echo ')'
			;;
		read)
			printf '(accept %s)\n' "$([ "$(control ntpd)" = "server" ] && echo "#t" || echo "#f")" #"
			;;
		write)
			if [ "$in_accept" = "#t" ]; then
			    control ntpd server >&2
			else
			    control ntpd client >&2
			fi
			echo '()'
			;;
		new)
			local type="server"
			[ "$in_type" = "pool" ] && type="servers"

			if [ -n "$in_name" ] && egrep -qs "^[[:space:]]*$type[[:space:]]+$in_name([[:space:]]|$)" "$NTPD_CONF"; then
			    printf '(error "%s")' "`_ "same server already in use"`"
			else
			    [ -n "$in_name" ] && printf '%s %s\n' "$type" "$in_name" >>"$NTPD_CONF"
			    service ntpd condreload >&2
			    echo '()'
			fi
			;;
		delete)
			if [  "$in__objects" != "/" ]; then
    			    local type="server"
			    [ "${in__objects%/*}" = "pools" ] && type="servers"
			    sed -r "/^$type[[:space:]]${in__objects#*/}([[:space:]]|$)/ d" -i "$NTPD_CONF"
			fi
			service ntpd condreload >&2
			echo '()'
			;;
		*)
			echo '#f'
			;;
	esac
}

message_loop
