#!/bin/bash
# Selective but cumulative TESS data bulk dump since the beginning of the project in IDA format
# This is meant to be invoked manually, not a from cron file

# ------------------------------------------------------------------------------
#                             AUXILIARY FUNCTIONS
# ------------------------------------------------------------------------------


help() {
    name=$(basename ${0%.sh})
    echo "Usage:"
    echo "$name -d <database path> -r <regeneration dir base> -o <dst dir>  -m <YYYY-MM> -l <log file path prefix>"
    echo "Defaults to:"
    echo "name -d $DEFAULT_DATABASE -o $DEFAULT_DST_DIR -m $DEFAULT_MONTH -l $DEFAULT_LOG_FILE_PREFIX"
}


DEFAULT_DATABASE="/var/dbase/tess.db"
DEFAULT_DST_DIR="/var/dbase/reports/IDA"
DEFAULT_MONTH="2015-01"
DEFAULT_LOG_FILE_PREFIX=/var/log/ida_selective
DEFAULT_REGEN_DIR="${HOME}/regenerate.ida.d"

TEE=$(which tee)
TESS_IDA=/usr/local/bin/tess-ida
DATE=$(/usr/bin/date +%Y%m%d)


dbase="${DEFAULT_DATABASE}"
regen_dir="${DEFAULT_REGEN_DIR}"
out_dir="${DEFAULT_DST_DIR}"
month="${DEFAULT_MONTH}"
log_file="${DEFAULT_LOG_FILE_PREFIX}_${DATE}.log"

while getopts ":hd:r:o:m:l:" opt; do
    case ${opt} in
    d)
        dbase="${OPTARG}"
        ;;
    r)
        regen_dir="${OPTARG}"
        ;;
    o)
        out_dir="${OPTARG}"
        ;;
    m)
        month="${OPTARG}"
        ;;
    l)
        log_file="${OPTARG}_${DATE}.log"
        ;;
    h)
        help
        exit 0
        ;;
    :)
        echo "Option -${OPTARG} requires an argument."
        exit 1
        ;;
    ?)
        echo "Invalid option: -${OPTARG}."
        exit 1
        ;;
  esac
done
shift "$((OPTIND-1))"


if  [[ ! -f $dbase || ! -r $dbase ]]; then
        echo "[WARNING] Database file $dbase does not exists or is not readable. Aborting..." | ${TEE} -a ${log_file}
        exit 1
fi

if  [[ ! -d "${regen_dir}/input" ]]; then
        echo "[WARNING] making IDA regeneration files dir structure under ${regen_dir}" | ${TEE} -a ${log_file}
       	mkdir -p "${regen_dir}/input"
       	mkdir -p "${regen_dir}/processed"
fi

photometers=$(ls -1 ${regen_dir}/input)

# Loops over the instruments file and dumping data
for instrument in $photometers; do
	  from_month=$(cat ${regen_dir}/input/${instrument})
	  if [[ -z "$from_month" ]]; then
		  from_month=${DEFAULT_START_DATE}
	  fi
    echo "Generating IDA file for TESS $instrument from ${from_month} under ${out_dir}/${instrument}" | ${TEE} -a ${log_file}
    ${TESS_IDA} ${instrument} --console --log-file ${log_file} --from-month ${from_month} -d ${dbase} -o ${out_dir}
    echo "moving control file ${regen_dir}/input/${instrument} => ${regen_dir}/processed/${instrument}" | ${TEE} -a ${log_file}
    if  [[ -f ${regen_dir}/processed/${instrument} ]]; then
      echo "[WARNING] moving previous input control file to ${regen_dir}/processed/${instrument}.${DATE}" | ${TEE} -a ${log_file}
      mv ${regen_dir}/processed/${instrument} ${regen_dir}/processed/${instrument}.${DATE}
    fi
    mv ${regen_dir}/input/${instrument} ${regen_dir}/processed/${instrument}
done
