#!/bin/bash -
#===============================================================================
#
#         FILE: do_pandoc_assets
#
#        USAGE: ./do_pandoc_assets shownumber
#
#  DESCRIPTION: Runs Pandoc on any assets that need it. The assets are in the
#               directory ~/HPR/Show_Submission/shownotes/hpr1234/ and the
#               result is written to the 'uploads' directory to go to the HPR
#               server.
#
#      OPTIONS: ---
# REQUIREMENTS: ---
#         BUGS: ---
#        NOTES: ---
#       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
#      VERSION: 0.0.1
#      CREATED: 2024-08-14 18:54:21
#     REVISION: 2024-08-14 23:15:48
#
#===============================================================================

set -o nounset                              # Treat unset variables as an error

SCRIPT=${0##*/}
# DIR=${0%/*}

VERSION='0.0.1'

STDOUT="/dev/fd/2"

#
# Load library functions
#
LIB="$HOME/HPR/function_lib.sh"
[ -e "$LIB" ] || { echo "$SCRIPT: Unable to source functions"; exit 1; }
# shellcheck source=/home/cendjm/HPR/function_lib.sh
source "$LIB"

#
# Colour codes
#
define_colours

# {{{ Functions: -- _usage --
#===  FUNCTION  ================================================================
#         NAME: _usage
#  DESCRIPTION: Report usage
#   PARAMETERS: None
#      RETURNS: Nothing
#===============================================================================
_usage () {
    cat >$STDOUT <<-endusage
Usage: ./${SCRIPT} [-h] [-d] shownumber

Version: $VERSION

Runs Pandoc against assets for a particular show, catering for the case when
a host sends in external notes (referenced from the main notes) in Markdown
format rather than HTML.

For the moment the only format catered for is Markdown, in files with the
suffix 'md' or 'mkd'

Options:
  -h                    Print this help
  -d                    Select dry run mode

Arguments:
    shownumber

Examples
  ./${SCRIPT} -h
  ./${SCRIPT} -d 2240

endusage
    exit
}
# }}}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#
# Sanity checks
#
JQ=$(command -v jq)
[ -n "$JQ" ] || { echo "Program 'jq' was not found"; exit 1; }

#
# Process options first
#
while getopts :dDh opt
do
    case "${opt}" in
        d) DRYRUN=1;;
        h) _usage;;
        ?) echo "$SCRIPT: Invalid option; aborting"; exit 1;;
    esac
done
shift $((OPTIND - 1))

#
# Default options if not provided
#
DRYRUN=${DRYRUN:-0}

#
# Check there's an argument after removing any options. Abort if not
#
if [[ $# -ne 1 ]]; then
    _usage
fi

#
# Make the explicit show id, catering for leading zeroes (belt & braces)
#
# TODO: cater for 'hpr1234' as well as a plain number
printf -v SHOWID 'hpr%04d' "$1"

#
# Paths to files
#
# ------------------------------------------------------------------------------
# Main directory
BASENAME="$HOME/HPR/Show_Submission"

# JSON to YAML Perl script
# J2Y="$BASENAME/author_title.pl"
# [ -e "$J2Y" ] || { echo "Program '$J2Y' was not found"; exit 1; }

# The notes for all shows are here
SHOWNOTES="$BASENAME/shownotes"

# Notes for this show are here
SHOWDIR="$SHOWNOTES/$SHOWID"

# Assets which need Pandoc are here
ASSETDIR="$SHOWDIR/uploads"

# The incoming JSON from the upload form
JSONFILE="$SHOWDIR/shownotes.json"

#
# Check there are Markdown files in the asset directory and collect their
# names
#
declare -a MARKDOWN
mapfile -t MARKDOWN < <(find "$ASSETDIR" -type f -regextype posix-extended -regex '.*\.mk?d')

#
# Nothing found?
#
if [[ ${#MARKDOWN[@]} -eq 0 ]]; then
    coloured 'red' "No Markdown files found"
    exit 1
fi

# coloured 'cyan' "Markdown files found:"
# printf '%s\n' "${MARKDOWN[@]}"

#
# Process whatever markup we have, only catering for Markdown at present
#
for file in "${MARKDOWN[@]}"; do
    coloured 'yellow' "Processing: $file"
    OUTFILE="${file%.*}.html"

    if [[ $DRYRUN -eq 0 ]]; then
        #
        # Build nice HTML, disabling the smart quotes and stuff, but using
        # a local format definition and the HPR CSS. For now we just add
        # a title from the JSON. We could give Pandoc a block of YAML with
        # more attributes if we wished.
        #
        pandoc -f markdown-smart -t html5  --standalone \
            --template=hpr.html5 -c https://hackerpublicradio.org/css/hpr.css \
            --metadata title="$(jq -r '.episode.Title' "$JSONFILE")" --strip-comments \
            -o "$OUTFILE" "${file}"
        coloured 'green' "Wrote: $OUTFILE"
    else
        coloured 'yellow' "Dry run mode: Would have written $OUTFILE"
    fi
done

exit

# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21:fdm=marker

