#!/bin/sh

alterator_api_version=1
po_domain="alterator-datetime"

alteratordhcp_file=/var/lib/alterator/alterator-dhcp-general

. alterator-datetime-functions

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

    if test_ntp_status; then
	_ "set automatically"
	return
    fi

    if test_bool "$1"; then
	flags='--utc'
    else
	flags='--localtime'
    fi

    (export LC_ALL="$firstlang"; export LANGUAGE="$langlist"; export TZ="$2"; /sbin/hwclock $flags --show|
	sed 's/[[:space:]]\+[0-9.-]\+[[:space:]]\+[[:alpha:]]\+$//')
}

# Try to load rpc module
[ -c /dev/rtc ] || modprobe rtc

on_message()
{
	case "$in_action" in
		type)
			write_type_item ntp_pool hostname
			write_type_item date date
			write_type_item time time
			;;
		list)

			case "$in__objects" in
			    avail_country)
				list_country
				;;
			    avail_zone)
				local country="$in_name"
				[ -n "$country" -a -z "$in_reset" ] || country="$(read_country $(read_zone))"
				list_zone "$country" ;;
			esac
			;;
		ctime)
			write_string_param ctime "$(read_ctime "$in_utc" "$in_zone")"
			;;
		read)
			case "$in__objects" in
			    /)
				## timezone
				local country="$in_name"
				local zone="$in_zone"

				local default_zone="$(read_zone)"
				local default_country="$(read_country "$default_zone")"

				if [ -z "$country" -o -n "$in_reset" ];then
				    zone="$default_zone"
				    country="$default_country"
				elif [ "$country" = "$default_country" ];then
				    zone="$default_zone"
				fi

				write_string_param zone "$zone"
				write_string_param name "$country"

				## datetime
				local utc="$(read_utc)"
				write_bool_param utc "$utc"
				write_string_param ctime "$(read_ctime "$(write_bool $utc)" "$zone")" #"
				;;
			    edit)
				#date&time
				write_string_param 'date' "$(date +%F)"
				write_string_param 'time' "$(date +%T)"

				#ntp
				write_string_param ntp_pool "$(read_pool)"

				! [ "$(/usr/sbin/control ntpd)" = "server" ]
				write_bool_param ntp_accept "$?"

				! test_ntp_status
				write_bool_param ntp_status "$?"
			    ;;
			esac
			;;
		write)
			case "$in__objects" in
			    /)
				write_utc "$in_utc"

				if [ -n "$in_zone" ] && ! write_zone "$in_zone"; then
					write_error "`_ "Unable to setup time zone"`"
					return
				fi

				/sbin/service clock start >&2
				;;
			    edit)
				write_ntp_status "$in_ntp_status"

				#ntp vs date&time
				if test_bool "$in_ntp_status";then
				    write_pool "$in_ntp_pool"
				    write_ntp_accept "$in_ntp_accept"
				else
				    if  [ -n "$in_date" -a -n "$in_time" ] &&
					! date --set="$in_date $in_time" 2>/dev/null >/dev/null; then
					write_error "`_ "unable to setup time"`"
					return
				    fi
				fi

				## alterator-dhcp
				if test_bool "$in_ntp_status" && test_bool "$in_ntp_accept";then
				    shell_config_set "$alteratordhcp_file" client_ntp "*"
				else
				    shell_config_del "$alteratordhcp_file" client_ntp
				fi

				/sbin/service clock sync >&2
				;;
			esac

			
			;;
	esac
}

message_loop
