#!/bin/sh

openntpd_file=/etc/ntpd.conf
ntp_file=/etc/ntp.conf

sysconfigclock_file=/etc/sysconfig/clock
zonetab_file=/usr/share/zoneinfo/zone.tab
zoneinfo_dir=/usr/share/zoneinfo

. alterator-sh-functions
. alterator-service-functions
. shell-config

### ntp

ntpd_rdelim='[[:space:]]\+'
ntpd_wdelim=' '

read_pool()
{
    if [ -f "$openntpd_file" ];then
	shell_config_get "$openntpd_file" "servers" "$ntpd_rdelim"|head -n1
    elif [ -f "$ntp_file" ];then
	local v="$(shell_config_get "$ntp_file" "server" "$ntpd_rdelim"|head -n1)"
	v="${v%% *}"
	[ "$v" = "127.127.1.0" ] || echo "$v"
    fi
}

write_pool()
{
    if [ -f "$openntpd_file" ];then
	shell_config_del "$openntpd_file" "server" "$ntpd_rdelim"
	shell_config_del "$openntpd_file" "servers" "$ntpd_rdelim"
	[ -z "$1" ] || shell_config_set "$openntpd_file" "servers" "$1" "$ntpd_rdelim" "$ntpd_wdelim"
    elif [ -f "$ntp_file" ];then
    cat>"$ntp_file"<<EOF
#generated by alterator-datetime

driftfile /etc/ntp/drift

$([ -z "$1" ] || printf "server %s iburst burst prefer\n" "$1")
server 127.127.1.0 iburst
fudge  127.127.1.0 stratum 10

restrict default noquery nomodify
restrict 127.0.0.1
EOF
    fi
    service_control ntpd condrestart
}

test_ntp_status()
{
	service_control ntpd is-enabled
}

write_ntp_status()
{
    if test_bool "$1"; then
	service_control ntpd on
	service_control ntpd start
    else
	service_control ntpd off
	service_control ntpd condstop
    fi
}

test_ntp_accept()
{
    local result=
    if result="$(/usr/sbin/control ntpd 2>/dev/null)";then
	[ "$result" = "server" ]
    else
	true
    fi
}

write_ntp_accept()
{
    if /usr/sbin/control ntpd >/dev/null 2>/dev/null;then
	if test_bool "$1";then
	    /usr/sbin/control ntpd server >/dev/null 2>/dev/null
	else
	    /usr/sbin/control ntpd client >/dev/null 2>/dev/null
	fi
    else
	true
    fi
}

### timezone

cat_isotab_file()
{
    local domain="${2:-$po_domain}"
    local langlist="$(write_language "$in_language")"
    local firstlang="${langlist%%:*}"

    LC_ALL="$firstlang" LANGUAGE="$langlist" dumpisotab 2>/dev/null|
	LC_ALL="$firstlang" LANGUAGE="$langlist" sort -k2,2 2>/dev/null
}


read_zone()
{
	local ZONE=
	local language="${in_language%%;*}"

	. "$sysconfigclock_file"

	if [ -z "$ZONE" ]; then
		local region="$(printf %s "$language" |
				sed -r -e 's,[a-z]+_([^\.]+)(\..*)?,\1,' |
				tr '[:lower:]' '[:upper:]')"

		[ -z "$region" ] ||
			ZONE="$(grep "^$region[[:space:]]" "/etc/alterator/datetime/defaultzones" |cut -f2)"

		[ -n "$ZONE" ] ||
			ZONE="Europe/London"
	fi

	printf %s\\n "$ZONE"
}

write_zone()
{
    [ -f "$zoneinfo_dir/$1" ] || return 1

    shell_config_set "$sysconfigclock_file" "ZONE" "$in_zone"
    rm -f /etc/localtime && cp -pf -- "$zoneinfo_dir/$in_zone" /etc/localtime
}

read_country()
{
    cut -f1,3 "$zonetab_file" |grep "[[:space:]]$1" |cut -f1
}

translate_zone()
{
    _ "$1" alterator-tzone-tz|tr '_' ' '
}

country_name()
{
    cat_isotab_file|sed -n "s/^$1[[:space:]]\+//p"
}

list_zone() {
	local IFS="	"
	local code coordinates zone comments

	grep "^$1[[:space:]]" "$zonetab_file" |
	while read code coordinates zone comments; do
		tr_zone="$(translate_zone "$zone")"
		write_enum_item "$zone" "${tr_zone#*/}"
	done
}

list_country() {
    cat_isotab_file|write_enum
}

### utc

read_utc()
{
    shell_config_get "$sysconfigclock_file" UTC
}

write_utc()
{
    if test_bool "$1";then
	shell_config_set "$sysconfigclock_file" UTC "true"
    else
	shell_config_set "$sysconfigclock_file" UTC "false"
    fi
}
