#!/bin/sh

. /etc/init.d/functions
. /usr/share/alterator/build/backend3.sh

#i18n()
#{
#    LANG=${in_language%%;*}.utf8 gettext "alterator-timezone" "$1"
#}

ZONEINFODIR=/usr/share/zoneinfo
ZONETABFILE=/usr/share/zoneinfo/zone.tab
ISOTABFILE=/usr/share/zoneinfo/iso3166.tab
SYSCONFIG_CLOCK=/etc/sysconfig/clock
ETC_LOCALTIME=/etc/localtime

on_message()
{
	case "$in_action" in
		list)
			if [ "$in__objects" == "/" ];then
				echo '('
				echo '("current")'
				echo '("zonelist")'
				echo ')'
			elif [ "${in__objects##*/}" = "zonelist" ]; then
				echo '('
				local TMPISO=`mktemp /tmp/isotab.XXXXXXXXX`
				grep -v "^#" $ISOTABFILE|sort -u >$TMPISO
				grep -v "^#" $ZONETABFILE|sort|join -1 1 -2 1 $TMPISO - -o "1.2,2.3" -t"	"|sed "s|\t.*/|/|;s|.*|(\"&\")|"|sort -r
				rm -f $TMPISO
				echo ')'
			else
				echo '()'
			fi
			;;
		read)
			if [ "$in__objects" == "current" ];then
			    SourceIfNotEmpty $SYSCONFIG_CLOCK
			    [ -n "$ZONE" ] || ZONE="Europe/Moscow"
			    [ -n "$UTC" ] || UTC=0
			    local REGION=${ZONE#*/}
			    local COUNTRY_CODE=$(grep "^[^#].*$ZONE" $ZONETABFILE|cut -f1 -d'	')
			    local COUNTRY_NAME=$(grep "^$COUNTRY_CODE" $ISOTABFILE|cut -f2 -d'	')
			    is_no $UTC
			    local IS_UTC="$?"
			    is_no $HWCLOCK_SET_AT_HALT
			    local IS_HWCLOCK_SET_AT_HALT="$?"
			    is_no $HWCLOCK_ADJUST
			    local IS_HWCLOCK_ADJUST="$?"
			    echo '('
			    printf 'ZONE \"%s\"\n' "$COUNTRY_NAME/$REGION"
			    printf 'UTC \"%s\"\n' "$IS_UTC"
			    printf 'HWCLOCK_SET_AT_HALT \"%s\"\n' "$IS_HWCLOCK_SET_AT_HALT"
			    printf 'HWCLOCK_ADJUST \"%s\"\n' "$IS_HWCLOCK_ADJUST"
			    echo ')'
			else
			    echo '(#t)'
			fi
			;;
		write)
			if [ "$in__objects" == "current" ];then
			    if [ -n "$in_UTC" ]; then
				local STR_UTC="1"
				[ "$in_UTC" == "yes" ] || STR_UTC="0"
				if grep -qe "^\s*UTC=.*$" $SYSCONFIG_CLOCK ; then
				    sed -i "s|^\s*UTC=.*$|UTC=$STR_UTC|" $SYSCONFIG_CLOCK
				else
				    echo "UTC=$STR_UTC" >> $SYSCONFIG_CLOCK
				fi
			    fi
			    if [ -n "$in_HWCLOCK_SET_AT_HALT" ]; then
				local STR_HWCLOCK_SET_AT_HALT="true"
				[ "$in_HWCLOCK_SET_AT_HALT" == "yes" ] || STR_HWCLOCK_SET_AT_HALT="false"
				if grep -qe "^\s*HWCLOCK_SET_AT_HALT=.*$" $SYSCONFIG_CLOCK ; then
				    sed -i "s|^\s*HWCLOCK_SET_AT_HALT=.*$|HWCLOCK_SET_AT_HALT=$STR_HWCLOCK_SET_AT_HALT|" $SYSCONFIG_CLOCK
				else
				    echo "HWCLOCK_SET_AT_HALT=$STR_HWCLOCK_SET_AT_HALT" >> $SYSCONFIG_CLOCK
				fi
			    fi
			    if [ -n "$in_HWCLOCK_ADJUST" ]; then
				local STR_HWCLOCK_ADJUST="true"
				[ "$in_HWCLOCK_ADJUST" == "yes" ] || STR_HWCLOCK_ADJUST="false"
				if grep -qe "^\s*HWCLOCK_ADJUST=.*$" $SYSCONFIG_CLOCK ; then
				    sed -i "s|^\s*HWCLOCK_ADJUST=.*$|HWCLOCK_ADJUST=$STR_HWCLOCK_ADJUST|" $SYSCONFIG_CLOCK
				else
				    echo "HWCLOCK_ADJUST=$STR_HWCLOCK_ADJUST" >> $SYSCONFIG_CLOCK
				fi
			    fi
			    if [ -n "$in_ZONE" ]; then
				local COUNTRY=$(grep "${in_ZONE%%/*}$" $ISOTABFILE|cut -f1 -d'	')
				if [ -n "$COUNTRY" ]; then
				    local ZONE=$(grep "^$COUNTRY.*${in_ZONE#*/}	" $ZONETABFILE|cut -f3 -d'	')
				    if [ -f "$ZONEINFODIR/$ZONE" ];then
					if grep -qe "^\s*ZONE=.*$" $SYSCONFIG_CLOCK ; then
					    sed -i "s|.*ZONE=.*$|ZONE=\"$ZONE\"|" $SYSCONFIG_CLOCK
					else
					    echo "ZONE=\"$ZONE\"" >> $SYSCONFIG_CLOCK
					fi
					cat "$ZONEINFODIR/$ZONE" >$ETC_LOCALTIME
				    fi
				fi
			    fi
			fi
			echo '()'
			;;
		*)
			echo '#f'
	esac
}

message_loop
