#!/bin/ash

state="status"

dect="Dect Configuration"
mainswversion="SW Version"
mainmenu="$dect&$mainswversion"

dectreg="Register Dect"
dectring="Ring Handsets"
dectset="Set date/time"
dectmenu="$dectreg&$dectring&$dectset"

app_mnt_pt=/mnt/appfs/vodia
app_factory=${app_mnt_pt}/factory
app_runtime=${app_mnt_pt}/runtime
bin_dir=${app_runtime}/pbx
logo_dir=${bin_dir}

disp () {
    td_fp_tool display clear 0
    td_fp_tool display write_string 0 2 6 "$1"
    td_fp_tool display write_string 0 2 18 "$2"
    td_fp_tool display flush 0
}

keyb () {
    timeout=$1
    td_fp_tool button wait all pressed "$timeout" txt | awk '{if($4 == "name"){print substr($5, 2, 2);}}'
}

ipaddr () {
    link=$(ifconfig | awk '{ if ($2 == "Link") link = $1;  if ($1 == "inet") {printf "%s: %s&", link, substr($2, 6)} }')
    echo "$link"
}

incindex () {
    max=$(echo $2 | awk '{n=split($0, array, "&")} END{print n }')
    ret=$(($1+1))
    if [ "$ret" -gt "$max" ]; then
	ret=1
    fi
    echo "$ret"
}

decindex () {
    max=$(echo $2 | awk '{n=split($0, array, "&")} END{print n }')
    ret=$(($1-1))
    if [ "$ret" -le 0 ]; then
	ret="$max"
    fi
    echo "$ret"
}

getitem () {
    ret=$(echo "$2" | cut -d'&' -f"$1")
    echo "$ret" 
}

friendlyname () {
    if [ -z $(echo "$1"|sed "/lan/d") ]; then
	echo "LAN"
    elif [ -z $(echo "$1"|sed "/wan/d") ]; then
	echo "WAN"
    else
	echo "IP"
    fi
}

format () {
    echo $1
}

status () {
    #disp "Status"
    td_fp_tool display clear 0
    td_fp_tool display write_pixmap 0 34 0 60 29 "${logo_dir}/Vodia_logo_60x29.bmp.td_fp"
    td_fp_tool display flush 0
    ips=$(ipaddr)
    item=0;
    while true
    do
	key=$(keyb 5000)
	if [ "$key" = "" ]; then
	    item=$((item+1))
	    ip=$(echo "$ips" | cut -d'&' -f"$item")
	    if [ $(echo "$ip" | cut -d':' -f2) = "127.0.0.1" ]; then
		item=$((item+1))
		ip=$(echo "$ips" | cut -d'&' -f"$item")
	    fi
	    if [ "$ip" = "" ]; then
		item=1
		ip=$(echo "$ips" | cut -d'&' -f"$item")
	    fi
	    #echo "$ip"
	    line1=$(echo "$ip" | cut -d':' -f1)
	    line2=$(echo "$ip" | cut -d':' -f2)
	    disp1=$(friendlyname "$line1")
	    disp2=$(format "$line2")
	    disp "$disp1:" "$disp2"
	elif [ "$key" = "OK" ]; then
	    state="menu"
	    return 1
	else
	    state="status"
	    return 1
	fi
    done
}

menu () {
    menuitems="$1"
    returnstate="$2"
    topline="$3"
    idx=1
    menuitem=$(getitem "$idx" "$menuitems")
    disp "$topline" "$menuitem"
    while true
    do
	key=$(keyb 0)
	if [ "$key" = "LE" ]; then
	    state="$returnstate"
	    return 1
	elif [ "$key" = "UP" ]; then
	    idx=$(incindex "$idx" "$menuitems")
	    menuitem=$(getitem "$idx" "$menuitems")
	    disp "$topline" "$menuitem"
	elif [ "$key" = "DO" ]; then
	    idx=$(decindex "$idx" "$menuitems")
	    menuitem=$(getitem "$idx" "$menuitems")
	    disp "$topline" "$menuitem"
	elif [ "$key" = "OK" ]; then
	    state="$menuitem"
	    #echo "$state"
	    return 1
	fi
    done
}

showversion () {
    disp "SW Version" $(cat "$bin_dir/version")
    key=$(keyb 0)
    state="menu"
}

dect () {
    if [ "$1" = "register" ]; then
	echo 1 > /proc/pagemode
    elif [ "$1" = "ring" ]; then
	echo 2 > /proc/pagemode
    elif [ "$1" = "set" ]; then
	echo 3 > /proc/pagemode
    fi
    state="menu"
}    

main () {
    while true
    do
	if [ "$state" = "status" ]; then
	    status
	elif [ "$state" = "menu" ]; then
	    menu "$mainmenu" "status" "Main Menu"
	elif [ "$state" = "$mainswversion" ]; then
	    showversion
	elif [ "$state" = "$dect" ]; then
	    menu "$dectmenu" "menu" "$dect"
	elif [ "$state" = "$dectreg" ]; then
	    dect "register"
	elif [ "$state" = "$dectring" ]; then
	    dect "ring"
	elif [ "$state" = "$dectset" ]; then
	    dect "set"
	else
	    state="status"
	fi
    done
}

main
