#!/bin/bash

#########################################
# Name: llast
#
# Summary: dump last data from log
#
# Description:
#
# Author: kheadley
#
# Copyright MBARI 2014
#
#########################################

#########################################
# Script configuration defaults
# casual users should not need to change
# anything below this section
#########################################
VERBOSE="FALSE"

#################################
# Script variable initialization
#################################
XPRES="xpres"
T_HOUR=0
T_MIN=0
T_SEC=0
SID=""
TID=""
CFG=""
ARCH=""
if [ "${XFHOME}" ]
then
	ARCH="-a ${XFHOME}/arch"
else
	ARCH="-a ./arch"
fi
#################################
# Function Definitions
#################################
#################################
# name: sigTrap
# description: signal trap callback
# will interrupt 
# args: none
#################################
sigTrap(){
    exit 0;
}

#################################
# name: printUsage
# description: print use message
# args: none
#################################
printUsage(){
    echo
    echo "usage: `basename $0`"
    echo "-H <hour> : hours          [$T_HOUR]"
    echo "-M <min>  : minutes        [$T_MIN]"
    echo "-S <sec>  : seconds        [$T_SEC]"
    echo "-s <id>   : source id"
    echo "-t <id>   : stream id"
    echo "-a <arch> : arch directory [$ARCH]"
    echo "-f <cfg>  : config file"
    echo "-V        : verbose output [$VERBOSE]"
    echo "-h        : print this help message"
    echo ""
    echo
}

########################################
# name: vout
# description: print verbose message to stderr
# args:
#     msg: message
########################################
vout(){
    if [ "$VERBOSE" == "TRUE" ]
    then
	echo "$1" >&2
    fi
}

########################################
# name: imsg
# description: echos with indent
# args:
#     msg: message
#  indent: indent level
########################################
imsg(){
  OIFS=$IFS
  IFS=""
  msg_pad="                                        "
  let "msg_indent=${1}"
  shift
  all="${@}"
  printf "%s%s\n" ${msg_pad:0:${msg_indent}} ${all}
  IFS=$OIFS
}

########################################
# name: msg
# description: echos with default indent
# args:
#     msg: message
########################################
msg(){
 imsg $MSG_INDENT "${*}"
}

########################################
# name: exitError
# description: print use message to stderr
# args:
#     msg:        error message
#     returnCode: exit status to return
########################################
exitError(){
    echo >&2
    echo "$1" >&2
    echo >&2
    exit $2
}

##########################
# Script main entry point
##########################


# Argument processing
if [ "$#" -eq 0 ];then
    printUsage
    exit 0
fi

last_good=0

while getopts a:f:H:M:S:s:t:hV Option
do

    case $Option in
    a ) ARCH="-a ${OPTARG}"
    ;;
    f ) CFG=${OPTARG}
    ;;
	H ) T_HOUR=${OPTARG}
	;;
	M ) T_MIN=${OPTARG}
	;;
	S ) T_SEC=${OPTARG}
	;;
	s ) SID="-s ${OPTARG}"
	;;
	t ) TID="-t ${OPTARG}"
	;;
	V ) VERBOSE="TRUE"
	;;
	h ) printUsage
	  exit 0
	;;
	? ) last_good=${OPTIND}
	;;
	*) # don't exit so that
	   # extra args may be passed on
	   vout "unrecognized option -[$Option]"
	   break
	;;
    esac
done


# call sigTrap on INT,TERM or EXIT
# trap sigTrap INT TERM EXIT

# reset trapped signals
# trap - INT TERM EXIT

if [ "${last_good}" -eq 0 ]
then
	shift "$((OPTIND - 1))"
else
	let "foo=${OPTIND}-${last_good}"
	shift "$((last_good-2))"
fi

ARGS=${1+"$@"}

DNOW=`date +%s`
let "DSTART=$DNOW-3600*${T_HOUR}"
let "DSTART=$DSTART-60*${T_MIN}"
let "DSTART=$DSTART-${T_SEC}"

TNOW=`date --date="@$DNOW" +%Y/%m/%dT%H:%M:%S`
TSTART="-b `date  -u --date="@$DSTART" +%Y/%m/%dT%H:%M:%S`"

vout "XPRES = ${XPRES}"
vout "T_HOUR  = ${T_HOUR}"
vout "T_MIN   = ${T_MIN}"
vout "T_SEC   = ${T_SEC}"
vout "SID     = ${SID}"
vout "TID     = ${TID}"
vout "CFG     = ${CFG}"
vout "ARCH    = ${ARCH}"
vout "ARGS    = ${ARGS}"
vout "now       $TNOW"
vout "start     $TSTART"
vout "cmd $XPRES ${ARCH} ${SID} ${TID} ${TSTART}"
vout "[ARGS=${ARGS}]"
vout "[CFG=${CFG}]"

if [ "${CFG}" ]
then
	$XPRES ${ARCH} ${SID} ${TID} ${TSTART} ${ARGS} < ${CFG}
else
	$XPRES ${ARCH} ${SID} ${TID} ${TSTART} ${ARGS} 
fi