#!/bin/bash

destination_dir="$HOME/tmp/hpr/processing/"
server_dir="hub.hackerpublicradio.org"

#################################################
# Display Error message, display help and exit

function echo_error() {
  echo -e "ERROR: $@" #1>&2
  display_help_and_exit
  exit 1
}

#################################################
# Display Information message

function echo_debug() {
  if [ "${debug}" != "0"  ]
  then
    echo -e "INFO: $@" #1>&2
  fi
}

#################################################
# Display Help

function display_help_and_exit() {
  echo_debug "For more information see https://repo.anhonesthost.net/HPR/hpr_documentation"
  exit 1
}

#################################################
# main

if [ "$( curl --location --silent --netrc-file ${HOME}/.netrc --write-out '%{http_code}' https://hub.hackerpublicradio.org/cms/status.php --output "${destination_dir}/status.csv" )" != 200 ]
then
  echo_error "Could not get a list of the queue status from \"https://hub.hackerpublicradio.org/cms/status.php\""
fi

if [ ! -s "${destination_dir}/status.csv" ]
then
  echo_error "Failed to retrieve \"${destination_dir}/status.csv\" from server."
fi

response=$( cat "${destination_dir}/status.csv" | grep --extended-regexp ',SHOW_SUBMITTED,|,RESERVE_SHOW_SUBMITTED,' | sort -t ',' -k 2 )
if [ -z "${response}" ]
then
  echo_debug "Getting a list of all the reservations."
  curl --location --silent --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/status.php" | sort -n
  echo_error "There appear to be no more shows with the status \"SHOW_SUBMITTED\"."
fi

printf '%s\n' ${response} | while read this_line
do
  IFS=, read -r timestamp_epoc ep_num ep_date key status email <<< "$( printf '%s\n' "${this_line}"  )"
  
  if [ "${ep_num}" == "9999" ]
  then
    source_dir="${server_dir}/reserve/"
  else
    source_dir="${server_dir}/upload/"
  fi
  if [ "$( find "${destination_dir}" -maxdepth 2 -mindepth 2 -type f -iname "*${key}*.srt" | wc --lines )" -ne "0" ]
  then
    echo_debug "The episode \"${timestamp_epoc} ${ep_num} ${ep_date} ${key} ${status} ${email}\" has been processed."
    continue
  fi
  
  show_path="$( ssh -n hpr -t "find \"${source_dir}\" -maxdepth 1 -mindepth 1 -type d -iname \"*${key}*\"" 2>/dev/null | sed "s#${source_dir}##g#" )"
  if [ -z "${show_path}" ]
  then
    echo_error "The show_path could not be found."
  fi
  show_dir="${destination_dir}/${show_path}"
  echo_debug "Copying \"hpr:${source_dir}/${show_path}/\" to \"${show_dir}/\""
  rsync --archive --verbose --partial --progress hpr:${source_dir}/${show_path}/ ${show_dir}/
  cd "${show_dir}"
  pwd
  find "${show_dir}/" -type f -exec file {} \; | grep -Ei 'audio|mpeg|video|MP4' | awk -F ': ' '{print $1}' | while read this_media
  do
    whisper --output_format srt --model tiny --language en --output_dir "${show_dir}" "${this_media}"
  done
  rsync --archive --verbose --partial --progress ${show_dir}/ hpr:${source_dir}/${show_path}/

done