#!/bin/bash

# ############################################################
#   V?.?   ????????  Author - Nate Duehr..
#   V3.1   ????????  VK8SJ  Status webpage changed
#   V3.2   13032011  VK8SJ  New webpage again!!
#
#
# This script released to the public domain with no warrany,
# expressed or implied.  Do with it what you wish.
# Nate Duehr, nate@natetech.com
# Time mods by John Williams VK5ZTY (from code borrowed and
# hacked from the saytime script)
# Audio files from the IRLP_CLOCK script are required
#
# Further destruction by Steve Jones VK8SJ to report remote
# status OR time depending on the two digit 'specialprefix' 
# as configured below. Script name changed to playremotedata..then..
# Complete rehash now to use node detail screen and rip heaps
# of info from it! Too many audio files required so TTS engine
# (swift or festival) used for playing back query reply.  Since
# beginning this, I have noticed the layout of the node detail
# page comes back in 4 different formats although they all look
# the same in a browser.
#
# *** Don't forget to set TTSengine to swift or festival!!
#
# ############################################################
#
# This script should be placed in /home/irlp/custom and called from the
# BOTTOM of /home/irlp/custom/custom_decode with a line that looks like:
# $CUSTOM/playremotedata $1 -- custom_decode should send ALL DTMF to
# this script.
## Everything that custom_decode gets passed in $1 from the command line
# should be passed to this program also.

######### CONFIGURATION ##########
# Set this to whatever two digits you want to use before a node
# number to play the remote node's local time, location or status.
# Ex: If TIMEPREFIX is set to "PP" and STATEPREFIX is set to "SP" then
# **3990 would tell you the local time at node number 3990 and *#3990
# would give the current status of node 3990 etc...

TIMEPREFIX="1P"           # 1#nnnn
STATEPREFIX="2P"          # 2#nnnn
LOCATIONPREFIX="3P"       # 3#nnnn ,  cool.. (I Hope!)
TTSengine="swift"         # TTS engine - 'swift' or 'festival'
WebPage="http://status.irlp.net/index.php?PSTART=11&nodeid="

###### END CONFIGURATION #########
#
# Get some help
source /home/irlp/custom/my-functions.sh

export TERM=vt100  # Fix for lynx hating a dumb terminal

# If rubbish passed to us, die
if [ "$#" = "0" ]||[ "${#1}" != "6" ] ; then  # gotta have a 6 digit pass
   dummyspit 6 2
fi

if [ ! -f $LOCAL/enable ] || [ -f $LOCAL/active ] ; then
   dummyspit 6 3
fi

echo " Processing request.."
echo "stn6732" > $LOCAL/active       # block incomming traffic
sendtone                             # Ack cmd received

# Here we parse out the first two digits of the command sent to
# this script and compare that to the PREFIXs above.
# If they do not match we exit.  Otherwise the script continues.
# We also set the page address for retrieval
IsReflector="No"
CALL_PREFIX=`echo $1|cut -c1-2`
NODETOCHECK=`echo $1|cut -c3-`
INNUM1=`echo $NODETOCHECK|cut -c1`
INNUM2=`echo $NODETOCHECK|cut -c2`
INNUM3=`echo $NODETOCHECK|cut -c3`
INNUM4=`echo $NODETOCHECK|cut -c4`
if [ "$INNUM1" = "9" ] ; then     # if reflector, set ch-0
   INNUM4="0"
   NODETOCHECK=`echo $1|cut -c3-5`"0"
   IsReflector="Yes"
fi

if [ "$CALL_PREFIX" != "$TIMEPREFIX" ] && \
      [ "$CALL_PREFIX" != "$STATEPREFIX" ] && \
      [ "$CALL_PREFIX" != "$LOCATIONPREFIX" ] ; then
      dummyspit 6 4
fi

if [ "$CALL_PREFIX" = "$TIMEPREFIX" ] ; then REQUEST="time" ; fi
if [ "$CALL_PREFIX" = "$STATEPREFIX" ] ; then REQUEST="status" ; fi
if [ "$CALL_PREFIX" = "$LOCATIONPREFIX" ] ; then REQUEST="location" ; fi

echo "Checking "$REQUEST" for Node: "$NODETOCHECK"."

echo " Crawling through the web now..."
#
# Now for some data mashing!
#
lynx -dump -dont_wrap_pre $WebPage$NODETOCHECK > $LOCAL/datadump || dummyspit 6 1

check="`grep "not found" $LOCAL/datadump`"
if [ ! -z "$check" ]; then
   echo "Node $NODETOCHECK is not active." > $LOCAL/voice
   echo "Node $NODETOCHECK status page not found"
   writelog2 "Node $NODETOCHECK status page not found"
   sendvoice $LOCAL/voice
   rm -f $LOCAL/active $LOCAL/voice
   exit 2
fi

tail -n+17 $LOCAL/datadump > $LOCAL/$NODETOCHECK
Nodenumber=`grep "Number" $LOCAL/$NODETOCHECK | awk '{print($3)}'`
Nodetime=`grep "date/time" $LOCAL/$NODETOCHECK |\
  awk '{print($4" "$6" "$7" "$8" "$9)}'`
if [ `grep "Node Status" $LOCAL/$NODETOCHECK |\
            awk '{print($4)}'` = "Extended" ] ; then
  Nodestatus=`grep "Node Status" $LOCAL/$NODETOCHECK |\
  awk '{print($4", "$5" "$6" "$7" "$8)}'`
 else
  Nodestatus=`grep "Node Status" $LOCAL/$NODETOCHECK |\
  awk '{print($4" "$5" "$6" "$7" "$8" "$9" "$10" "$11" "$12" "$13)}'`
fi
Nodecall=`grep "Callsign" $LOCAL/$NODETOCHECK | awk '{print($3)}'`
Nodecity=`grep "City" $LOCAL/$NODETOCHECK | awk '{print($3" "$4)}'`
Nodestate=`grep "Province" $LOCAL/$NODETOCHECK | awk '{print($3" "$4)}'`
Nodecountry=`grep "Country" $LOCAL/$NODETOCHECK | awk '{print($3" "$4)}'`
Nodebasefrq=`grep "Node Base" $LOCAL/$NODETOCHECK | awk '{print($5)}'`
Nodeoffset=`grep "Node Offset" $LOCAL/$NODETOCHECK | awk '{print($5)}'`
Nodectcss=`grep "Node CTCSS" $LOCAL/$NODETOCHECK | awk '{print($4)}'`

echo "Datacheck.. Node_Received-"$Nodenumber" <=> Node_Required-"$NODETOCHECK

if [ "$NODETOCHECK" != "$Nodenumber" ] ; then     # test for valid data
   Datacheck=`grep "Node" $LOCAL/datadump | awk '{print($2)" "($3)}'`
   if [ "$Datacheck" = "not found" ] ; then
     my_key
     $BIN/play $AUDIO/noexist.wav
     my_unkey
     writelog2 "Requested node does not exist."
     rm -f $LOCAL/active
     exit 1
   else
     dummyspit 6 5
   fi
fi

echo "Data from status.irlp.net: "
echo
txtcol grn
echo "Node Time........... "$Nodetime
echo "Node Status......... "$Nodestatus
echo "Node Callsign....... "$Nodecall
echo "Node City........... "$Nodecity
echo "Node State.......... "$Nodestate
echo "Node Country........ "$Nodecountry
echo "Node Frequency...... "$Nodebasefrq
echo "Node Offset......... "$Nodeoffset
echo "Node CTCSS frq...... "$Nodectcss
echo "Is this a reflector? "$IsReflector
txtcol def

case $REQUEST in
time)
   HOUR=`echo $Nodetime | awk '{print($1)}'| cut -c1-2`
   echo "Parsed HOUR: "$HOUR

   MIN=`echo $Nodetime | awk '{print($1)}'| cut -c4-5`
   echo "Parsed MIN: "$MIN

   MONTH=`echo $Nodetime | awk '{print tolower($2)}'|cut -c1-3`
   echo "Parsed MONTH: "$MONTH

   DAY=`echo $Nodetime | awk '{ print($3) }'`
   echo "Parsed DAY: "$DAY

   YEAR=`echo $Nodetime | awk '{ print($4) }'`
   echo "Parsed YEAR: "$YEAR
   
   if [ `echo $Nodetime | awk '{ print($5) }'` = "UTC" ] ; then
      UTC="TRUE"
   else
      UTC="FALSE"
   fi
   echo "Parsed UTC Response: "$UTC

   # Convert 24h time back to 12h time
   if [ "$HOUR" -le "11" ] ; then
      AMPM="A M "
   else 
      AMPM="P M "
   fi
   if [ "$IsReflector" = "Yes" ] ; then
   echo -n "The time at reflector, "$INNUM1" "$INNUM2" "$INNUM3" "$INNUM4" is, " > $LOCAL/voice
   else
   echo -n "The time at node, "$INNUM1" "$INNUM2" "$INNUM3" "$INNUM4" is, " > $LOCAL/voice
   fi
   #
   case $HOUR in
   0|00)           echo -n "12," >> $LOCAL/voice ;;
   10|11|12)       echo -n $HOUR"," >> $LOCAL/voice ;;
   0[1-9])         echo -n $HOUR | tr -d "0" >> $LOCAL/voice
                   echo -n "," >> $LOCAL/voice ;;
   1[3-9]|2[0-3])  echo -n `expr $HOUR - 12`"," >> $LOCAL/voice ;;
   esac

   #   echo -n $HOUR"," >> $LOCAL/voice

   if [ $MIN = "00" ] ; then
      echo -n " O'clock,"$AMPM"," >> $LOCAL/voice
    else
      echo -n $MIN","$AMPM"," >> $LOCAL/voice
   fi

   ######

   case $MONTH in
   jan)            echo -n " January "$DAY", "$YEAR >> $LOCAL/voice ;;
   feb)            echo -n " February "$DAY", "$YEAR >> $LOCAL/voice ;;
   mar)            echo -n " March "$DAY", "$YEAR >> $LOCAL/voice ;;
   apr)            echo -n " April "$DAY", "$YEAR >> $LOCAL/voice ;;
   may)            echo -n " May "$DAY", "$YEAR >> $LOCAL/voice ;;
   jun)            echo -n " June "$DAY", "$YEAR >> $LOCAL/voice ;;
   jul)            echo -n " July "$DAY", "$YEAR >> $LOCAL/voice ;;
   aug)            echo -n " August "$DAY", "$YEAR >> $LOCAL/voice ;;
   sep)            echo -n " September "$DAY", "$YEAR >> $LOCAL/voice ;;
   oct)            echo -n " October "$DAY", "$YEAR >> $LOCAL/voice ;;
   nov)            echo -n " November "$DAY", "$YEAR >> $LOCAL/voice ;;
   dec)            echo -n " December "$DAY", "$YEAR >> $LOCAL/voice ;;
   esac
   if [ $UTC = "TRUE" ] ; then 
     echo ", UTC." >> $LOCAL/voice
    else 
     echo "." >> $LOCAL/voice
   fi
   cat $LOCAL/voice

   # speak file contents, clean up and run away!
   sendvoice $LOCAL/voice
   writelog "Node - "$Nodenumber", Time - "$Nodetime
   rm -f $LOCAL/datadump
   rm -f $LOCAL/$NODETOCHECK
   rm -f $LOCAL/voice
   rm -f $LOCAL/active
   exit 0 ;;

status)
   echo -n "Node number "$INNUM1" "$INNUM2" "$INNUM3" "$INNUM4 > $LOCAL/voice
   if [ `echo $Nodestatus|cut -c1-4` = "IDLE" ] ; then
      echo -n " is currently, eyedle, " >> $LOCAL/voice
      echo $Nodestatus|cut -c5- >> $LOCAL/voice
    else
      echo " is currently, "$Nodestatus >> $LOCAL/voice
   fi
   cat $LOCAL/voice
   # speak file contents, clean up and run away!
   sendvoice $LOCAL/voice
   writelog "Node - "$Nodenumber", Status - "$Nodestatus
   rm -f $LOCAL/datadump
   rm -f $LOCAL/$NODETOCHECK
   rm -f $LOCAL/voice
   rm -f $LOCAL/active
   exit 0 ;;

location)
   if [ "$IsReflector" = "Yes" ]; then
     echo -n "Reflector, "$INNUM1" "$INNUM2" "$INNUM3" "$INNUM4 > $LOCAL/voice
     echo " is located in "$Nodecity", "$Nodecountry". " >> $LOCAL/voice
   else
   echo -n "Node number "$INNUM1" "$INNUM2" "$INNUM3" "$INNUM4 > $LOCAL/voice
   echo -n " is located in "$Nodecity", "$Nodecountry". " >> $LOCAL/voice
   echo -n "Its callsign is "`echo $Nodecall|cut -c1,1` >> $LOCAL/voice 
   echo -n "-"`echo $Nodecall|cut -c2,2`"-"`echo $Nodecall|cut -c3,3` >> $LOCAL/voice
   echo -n "-"`echo $Nodecall|cut -c4,4`"-"`echo $Nodecall|cut -c5,5` >> $LOCAL/voice
   echo -n "-"`echo $Nodecall|cut -c6,6`"-"`echo $Nodecall|cut -c7,7` >> $LOCAL/voice
   echo -n ", and operates on "$Nodebasefrq >> $LOCAL/voice
   if [ ! `echo $Nodeoffset|cut -c1-1` = "0" ] ; then   
     echo -n ", with a "$Nodeoffset" offset" >> $LOCAL/voice
    else
     echo -n ",  There is no R F offset" >> $LOCAL/voice 
   fi
   if [ ! `echo $Nodectcss|cut -c1-1` = "0" ] ; then
     echo ", and a "$Nodectcss" hertz C T C S S tone." >> $LOCAL/voice
    else
     echo ", and no C T C S S tone." >> $LOCAL/voice
   fi
   fi
   cat $LOCAL/voice

   # speak file contents, clean up and run away!
   sendvoice $LOCAL/voice
   writelog "Node - "$Nodenumber", Location data voiced."
   rm -f $LOCAL/datadump
   rm -f $LOCAL/$NODETOCHECK
   rm -f $LOCAL/voice
   rm -f $LOCAL/active
   exit 0 ;;

esac

echo "Should never get here."
senderror
exit 1
