#!/bin/sh

echo "$0 $@" >> /home/root/atcommands.txt
FN=""
WHEN=""
while [ $# -gt 0 ]; do
  LASTARG=$1
  if [ "-f" = "$LASTARG" ]; then
    shift
    FN=$1
  elif [ "-c" = "$LASTARG" ]; then
    shift
    JOBID=$1
    JFLAG="c"
  elif [ "-d" = "$LASTARG" ]; then
    shift
    JOBID=$1
    JFLAG="d"
  elif [ "-q" = "$LASTARG" ]; then
    # Ignore this flag; no use to us
    shift
  else
    # The remainder of the parameters should be the date/time
    if [ -n "$(echo $LASTARG | grep '\.')" ]; then
      if [ "8" = "$(echo $LASTARG | awk '{ print length($1) }')" ]; then
        # gpe pim apps give dates in form DD.MM.YY, which is useless
        LASTARG=$(echo $LASTARG | awk '{ print substr($1,4,2)"/"substr($1,1,2)"/"substr($1,7,2) }')
      fi
      LASTARG=$(echo $LASTARG | sed -e 's/\./\//g')
    fi
    WHEN="$WHEN $LASTARG"
    echo $WHEN >> /home/root/atcommands.txt
  fi
  shift
done

if [ -n "$FN" ]; then
  # We have a file name; add a new item for execution
  # Set job id to pid
  JOBID=$$
  if [ -z "$LASTARG" ]; then
    echo "Error: no date specified!"
    exit 1
  else
    if WHEN=`date -d "$WHEN" +%s`; then
      AT=/var/spool/at/$WHEN.$JOBID
      echo '#!/bin/sh' >$AT.new
      /bin/cat $FN >>$AT.new
      echo "" >>$AT.new
      echo 'rm -f $0' >>$AT.new
      /bin/chmod 755 $AT.new
      /bin/mv $AT.new $AT
      echo >/var/spool/at/trigger
      echo "job $JOBID at "$(date -d "1/1/70 +$WHEN seconds" +"%Y-%m-%d %H:%M")
    else
      exit $?
    fi
  fi
elif [ -n $JOBID ]; then
  # We have a job id to look up
  if [ "c" = "$JFLAG" ]; then
    # cat the job to stdout
    cat /var/spool/at/*.$JOBID
    echo >/var/spool/trigger
    exit 0
  elif [ "d" = "$JFLAG" ]; then
    # delete the job
    rm /var/spool/at/*.$JOBID
    echo >/var/spool/trigger
    exit 0
  fi
else
  echo "Error: incorrect parameters given!"
  exit 1
fi
