#!/bin/bash



convert_timezone()
{
    case "$1" in
    (right/*|posix/*)
        convert_timezone "${1#*/}"
        ;;
    ("Africa/Asmera")
        echo "Africa/Asmara"
        ;;
    ("America/Argentina/ComodRivadavia"|"America/Catamarca")
        echo "America/Argentina/Catamarca"
        ;;
    ("America/Buenos_Aires")
        echo "America/Argentina/Buenos_Aires"
        ;;
    ("America/Cordoba"|"America/Rosario")
        echo "America/Argentina/Cordoba"
        ;;
    ("America/Jujuy")
        echo "America/Argentina/Jujuy"
        ;;
    ("America/Mendoza")
        echo "America/Argentina/Mendoza"
        ;;
    ("Antarctica/South_Pole")
        echo "Antarctica/McMurdo"
        ;;
        "Asia/Ashkhabad")
            echo "Asia/Ashgabat"
            ;;
        ("Asia/Calcutta")
            echo "Asia/Kolkata"
            ;;
        "Asia/Chungking")
            echo "Asia/Chongqing"
            ;;
        "Asia/Dacca")
            echo "Asia/Dhaka"
            ;;
        ("Asia/Katmandu")
            echo "Asia/Kathmandu"
            ;;
        "Asia/Macao")
            echo "Asia/Macau"
            ;;
        ("Asia/Saigon")
            echo "Asia/Ho_Chi_Minh"
            ;;
        "Asia/Thimbu")
            echo "Asia/Thimphu"
            ;;
        "Asia/Ulan_Bator")
            echo "Asia/Ulaanbaatar"
            ;;
        "Atlantic/Faeroe")
            echo "Atlantic/Faroe"
            ;;
        "Australia/ACT" | "Australia/NSW")
            echo "Australia/Sydney"
            ;;
        "Australia/LHI")
            echo "Australia/Lord_Howe"
            ;;
        "Australia/North")
            echo "Australia/Darwin"
            ;;
        "Australia/Queensland")
            echo "Australia/Brisbane"
            ;;
        "Australia/South")
            echo "Australia/Adelaide"
            ;;
        "Australia/Tasmania")
            echo "Australia/Hobart"
            ;;
        "Australia/Victoria")
            echo "Australia/Melbourne"
            ;;
        "Australia/West")
            echo "Australia/Perth"
            ;;
        "Brazil/Acre")
            echo "America/Rio_Branco"
            ;;
        "Brazil/DeNoronha")
            echo "America/Noronha"
            ;;
        "Brazil/East")
            echo "America/Sao_Paulo"
            ;;
        "Brazil/West")
            echo "America/Manaus"
            ;;
        "Canada/Atlantic")
            echo "America/Halifax"
            ;;
        "Canada/Central")
            echo "America/Winnipeg"
            ;;
        "Canada/East-Saskatchewan")
            echo "America/Regina"
            ;;
        "Canada/Eastern")
            echo "America/Toronto"
            ;;
        "Canada/Mountain")
            echo "America/Edmonton"
            ;;
        "Canada/Newfoundland")
            echo "America/St_Johns"
            ;;
        "Canada/Pacific")
            echo "America/Vancouver"
            ;;
        "Canada/Saskatchewan")
            echo "America/Regina"
            ;;
        "Canada/Yukon")
            echo "America/Whitehorse"
            ;;
        "CET")
            echo "Europe/Paris"
            ;;
        "Chile/Continental")
            echo "America/Santiago"
            ;;
        "Chile/EasterIsland")
            echo "Pacific/Easter"
            ;;
        "CST6CDT")
            echo "SystemV/CST6CDT"
            ;;
        "Cuba")
            echo "America/Havana"
            ;;
        "EET")
            echo "Europe/Helsinki"
            ;;
        "Egypt")
            echo "Africa/Cairo"
            ;;
        "Eire")
            echo "Europe/Dublin"
            ;;
        "EST")
            echo "SystemV/EST5"
            ;;
        "EST5EDT")
            echo "SystemV/EST5EDT"
            ;;
        "GB")
            echo "Europe/London"
            ;;
        "GB-Eire")
            echo "Europe/London"
            ;;
        "GMT")
            echo "Etc/GMT"
            ;;
        "GMT0")
            echo "Etc/GMT0"
            ;;
        "GMT-0")
            echo "Etc/GMT-0"
            ;;
        "GMT+0")
            echo "Etc/GMT+0"
            ;;
        "Greenwich")
            echo "Etc/Greenwich"
            ;;
        "Hongkong")
            echo "Asia/Hong_Kong"
            ;;
        "HST")
            echo "Pacific/Honolulu"
            ;;
        "Iceland")
            echo "Atlantic/Reykjavik"
            ;;
        "Iran")
            echo "Asia/Tehran"
            ;;
        "Israel")
            echo "Asia/Tel_Aviv"
            ;;
        "Jamaica")
            echo "America/Jamaica"
            ;;
        "Japan")
            echo "Asia/Tokyo"
            ;;
        "Kwajalein")
            echo "Pacific/Kwajalein"
            ;;
        "Libya")
            echo "Africa/Tripoli"
            ;;
        "MET")
            echo "Europe/Paris"
            ;;
        "Mexico/BajaNorte")
            echo "America/Tijuana"
            ;;
        "Mexico/BajaSur")
            echo "America/Mazatlan"
            ;;
        "Mexico/General")
            echo "America/Mexico_City"
            ;;
        "Mideast/Riyadh87")
            echo "Asia/Riyadh87"
            ;;
        "Mideast/Riyadh88")
            echo "Asia/Riyadh88"
            ;;
        "Mideast/Riyadh89")
            echo "Asia/Riyadh89"
            ;;
        "MST")
            echo "SystemV/MST7"
            ;;
        "MST7MDT")
            echo "SystemV/MST7MDT"
            ;;
        "Navajo")
            echo "America/Denver"
            ;;
        "NZ")
            echo "Pacific/Auckland"
            ;;
        "NZ-CHAT")
            echo "Pacific/Chatham"
            ;;
        "Poland")
            echo "Europe/Warsaw"
            ;;
        "Portugal")
            echo "Europe/Lisbon"
            ;;
        "PRC")
            echo "Asia/Shanghai"
            ;;
        "PST8PDT")
            echo "SystemV/PST8PDT"
            ;;
        "ROC")
            echo "Asia/Taipei"
            ;;
        "ROK")
            echo "Asia/Seoul"
            ;;
        "Singapore")
            echo "Asia/Singapore"
            ;;
        "Turkey")
            echo "Europe/Istanbul"
            ;;
        "UCT")
            echo "Etc/UCT"
            ;;
        "Universal")
            echo "Etc/UTC"
            ;;
        "US/Alaska")
            echo "America/Anchorage"
            ;;
        "US/Aleutian")
            echo "America/Adak"
            ;;
        "US/Arizona")
            echo "America/Phoenix"
            ;;
        "US/Central")
            echo "America/Chicago"
            ;;
        "US/East-Indiana")
            echo "America/Indianapolis"
            ;;
        "US/Eastern")
            echo "America/New_York"
            ;;
        "US/Hawaii")
            echo "Pacific/Honolulu"
            ;;
        "US/Indiana-Starke")
            echo "America/Indianapolis"
            ;;
        "US/Michigan")
            echo "America/Detroit"
            ;;
        "US/Mountain")
            echo "America/Denver"
            ;;
        "US/Pacific")
            echo "America/Los_Angeles"
            ;;
        "US/Samoa")
            echo "Pacific/Pago_Pago"
            ;;
        "UTC")
            echo "Etc/UTC"
            ;;
        "WET")
            echo "Europe/Lisbon"
            ;;
        "W-SU")
            echo "Europe/Moscow"
            ;;
        "Zulu")
            echo "Etc/UTC"
            ;;
        *)
            echo "$1"
            ;;
    esac
}


if [ -e /etc/timezone ] ; then
    currenttz=$(cat /etc/timezone)
fi


TIMEZONE="$1"

if [ -z "${TIMEZONE}" ] ; then
    # No timezone given in config.lua
    exit 0
fi

if [ "x${currenttz}" = "x${TIMEZONE}" ] ; then
    exit 0 # no change
fi

if [ -f "/usr/share/zoneinfo/$TIMEZONE" ] ; then
    AREA="${TIMEZONE%%/*}"
    ZONE="${TIMEZONE#*/}"
else
    echo "Unknown timezone: ${TIMEZONE}"
    exit 2
fi

TIMEZONE="$(convert_timezone $TIMEZONE)"

# Update the time zone
echo $AREA/$ZONE > /etc/timezone
cp -f /usr/share/zoneinfo/$AREA/$ZONE /tmp/localtime.new && \
   mv -f /tmp/localtime.new /etc/localtime

logger "Setting default time zone to ${AREA}/${ZONE}"

exit 0
