#!/bin/bash

#########################################
# Name: rsync plot
#
# Summary: sync archive, generate PDF 
#          plots, convert to HTML
#
# Description: 
# Uses rsync, qsee, pdftohtml.
#
# Invoke like this
# rsync-plot -rqw
#
# Author: kheadley
#
# Copyright MBARI 2014
#
#########################################

#########################################
# Script configuration defaults
# casual users should not need to change
# anything below this section
#########################################

PLOT_WINDOW=72
OSDT_TIME_HR=1
UPDATE_INTERVAL_M=60
OSDT_TIME_OPT="-M ${UPDATE_INTERVAL_M}"
RP_CONF="./rsync-pub.conf"
QSEE_CMD="${XFHOME}/src/scripts/qsee/qsee"

DROPBOX_DIR=/home/ops/Dropbox/osdt-foce
PH_I_OUT=$DROPBOX_DIR/ph_i.csv
PH_E_OUT=$DROPBOX_DIR/ph_e.csv
CTDO_I_OUT=$DROPBOX_DIR/ctdo_i.csv

#QS_HTML="$UPDATE_TOP/html/xfgw"

#################################
# Script variable initialization
#################################
VERBOSE="FALSE"

unset RSKEY
unset SRC
unset DEST
unset PH_I_ID
unset PH_E_ID
unset CTDO_I_ID

unset DO_RSYNC
unset DO_QSEE
unset DO_HTML
unset DO_OSDT
unset QS_CONF
unset OSDT_XP_CONF

#################################
# name: printUsage
# description: print use message
# args: none
#################################
printUsage(){
    echo
    echo "usage: `basename $0`"
    echo "-f <p>  : config file          [$RP_CONF]"
    echo "-r      : do rsync             [$DO_RSYNC]"
    echo "-q      : do quick plots       [$DO_QSEE]"
    echo "-w      : do html              [$DO_HTML]"
    echo "-o      : do osdt              [$DO_OSDT]"
    echo "-t <n>  : plot window (nH|nM)  [$PLOT_WINDOW]"
    echo "-u <n>  : update interval (min)[$UPDATE_INTERVAL_M]"
    echo "-V      : verbose output       [$VERBOSE]"
    echo "-h      : print use message"
    echo ""
    echo
}

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

########################################
# 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
}

########################################
# name: processCmdLine
# description: do command line processsing
# args:
#     args:       positional paramters
#     returnCode: none
########################################
processCmdLine(){
	OPTIND=1
	vout "`basename $0` all args[$*]"

	while getopts f:oqrt:u:whv Option
	do
		vout "processing $Option[$OPTARG]"
		case $Option in
			f ) RP_CONF=$OPTARG
			;;
			o ) DO_OSDT="Y"
				rsync_ok=0
			;;
			r ) DO_RSYNC="Y"
			;;
			q ) DO_QSEE="Y"
				rsync_ok=0
			;;
			t ) PLOT_WINDOW=$OPTARG
			;;
			u ) UPDATE_INTERVAL_M=$OPTARG
			;;
			w ) DO_HTML="Y"
				rsync_ok=0
				qsee_ok=0
			;;
			v ) VERBOSE="TRUE"
			;;
			h)printUsage
				exit 0
			;;
			*) exit 0 # getopts outputs error message
			;;
		esac
	done
}

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

# use simple arg processing
processCmdLine $*

if [ "${UPDATE_INTERVAL_M}" -le 0 ]
then
	exitError "invalid interval ${UPDATE_INTERVAL_M}" -1
fi

OSDT_TIME_OPT="-M ${UPDATE_INTERVAL_M}"

# read options from config file
if [ ! -f "${RP_CONF}" ]
then
	exitError "Configuration file not found ${RP_CONF}" -1
fi

# pull in config file options
source ${RP_CONF}

# validate options
if [ ! "${RSKEY}" ] || [ ! "${SRC}" ] || [ ! "${DEST}" ]
then
	exitError "missing ssh option RSKEY[${RSKEY}] SRC[${SRC}] DEST[${DEST}]" -1
fi
if [ ! "${PH_I_ID}" ] || [ ! "${PH_E_ID}" ] || [ ! "${CTDO_I_ID}" ]
then
	exitError "missing id option PH_I_ID[${PH_I_ID}] PH_E_ID[${PH_E_ID}] CTDO_I_ID[${CTDO_I_ID}]" -1
fi

# set environment that depends on DEST
UPDATE_TOP="$DEST/last72"
PDF_DIR="$UPDATE_TOP/plot-output/pdf"
CSV_DIR="$UPDATE_TOP/plot-data"
PUB_DIR="$UPDATE_TOP/pub"
PUB_DATA="$PUB_DIR/data"
PUB_METRICS="$PUB_DIR/metrics"
ARCH_DIR="$DEST/arch"

CONF_DIR="$DEST/conf"
# if not defined, use default
if [ ! "${QS_CONF}" ]
then
	QS_CONF="$CONF_DIR/qs-qfoce.conf"
fi

# if not defined, use default
if [ ! "${OSDT_XP_CONF}" ]
then
	OSDT_XP_CONF="$CONF_DIR/xp-osdt-qfoce.conf"
fi


PUB_DATA_FILES="$PDF_DIR/dp*pdf $CSV_DIR/*csv"
PUB_METRICS_FILES="$PDF_DIR/mp*pdf $CSV_DIR/*txt"

vout "rsync pub using"
vout "QSEE_CMD     :$QSEE_CMD"
vout "DEST         :$DEST"
vout "UPDATE_TOP   :$UPDATE_TOP"
vout "PDF_DIR      :$PDF_DIR"
vout "CSV_DIR      :$CSV_DIR"
vout "PUB_DATA     :$PUB_DATA"
vout "PUB_METRICS  :$PUB_METRICS"
vout "ARCH_DIR     :$ARCH_DIR"
#vout "CONF_DIR    :$CONF_DIR"
vout "QS_CONF      :$QS_CONF"
vout "OSDT_XP_CONF :$OSDT_XP_CONF"
vout "OSDT_TIME_OPT:$OSDT_TIME_OPT"
vout "CTDO_I_ID    :$CTDO_I_ID"
vout "CTDO_I_OUT   :$CTDO_I_OUT"
vout "PH_I_ID      :$PH_I_ID"
vout "PH_I_OUT     :$PH_I_OUT"
vout "PH_E_ID      :$PH_E_ID"
vout "PH_E_OUT     :$PH_E_OUT"


# sync archive
if [ "${DO_RSYNC}" ]
then
	rsync -aivz -e "${RSKEY}" $SRC $DEST
	rsync_ok="$?"
fi

# generate PDF plots
if [ "${DO_QSEE}" ] && [ "${rsync_ok}" -eq 0 ]
then
	cd $UPDATE_TOP
	#qsee -l $PLOT_WINDOW < $QS_CONF
	$QSEE_CMD -l $PLOT_WINDOW -f $QS_CONF
	qsee_ok="$?"
fi

# generate HTML
if [ "${DO_HTML}" ] && [ "${qsee_ok}" -eq 0 ]
then
	if [ ! -d "${PUB_DIR}" ]
	then
		mkdir ${PUB_DIR}
	fi
	
	if [ ! -d "${PUB_DATA}" ]
	then
		mkdir ${PUB_DATA}
	fi
	
	if [ ! -d "${PUB_METRICS}" ]
	then
		mkdir ${PUB_METRICS}
	fi
		
	#PUB_DATA_SET=`ls $PUB_DATA_FILES`
	#PUB_METRICS_SET=`ls $PUB_METRICS_FILES`
	
	#for FILE in "$PUB_DATA_SET"
	#do 
	#	cp ${FILE} ${PUB_DATA}
	#done
	
	#for FILE in "$PUB_METRICS_SET"
	#do 
	#	cp ${FILE} ${PUB_METRICS}
	#done
	html_ok="$?"
fi

# generate OSDT data update
if [ "${DO_OSDT}" ] && [ "${rsync_ok}" -eq 0 ]
then
	cd $DEST
	skim -d $ARCH_DIR -s $PH_I_ID $OSDT_TIME_OPT  < $OSDT_XP_CONF >> $PH_I_OUT
	skim -d $ARCH_DIR -s $PH_E_ID $OSDT_TIME_OPT < $OSDT_XP_CONF >> $PH_E_OUT
	skim -d $ARCH_DIR -s $CTDO_I_ID $OSDT_TIME_OPT < $OSDT_XP_CONF >> $CTDO_I_OUT
	osdt_ok="$?"
fi

