#/usr/bin/env bash
# Copyright (c) 2019 University of Exeter
#               2018-2019 University of Paris-Saclay
#               2018-2019 The University of Sheffield
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in
#    the documentation and/or other materials provided with the
#    distribution.
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# SPDX-License-Identifier: BSD-2-Clause
#
# DESCRIPTION: prepare session root directory with DOF setup

## diagnostics

PRG="$(basename "$0")"

function usage()
{
  echo
  echo "Usage: isabelle $PRG [OPTIONS] [DIR]"
  echo
  echo "  Options are:"
  echo "    -h           print this help text and exit"
  echo "    -n NAME      alternative session name (default: DIR base name)"
  echo "    -o ONTOLOGY  (default: $DEFAULT_ONTOLOGY)"
  echo "       Available ontologies:"
  for t in "$ISABELLE_HOME_USER/DOF/latex/"*.sty; do
    if [[ $t =~ DOF-(.*).sty$ ]]; then
      echo "       * ${BASH_REMATCH[1]}"
    fi
  done
  echo "    -t TEMPLATE   (default: $DEFAULT_TEMPLATE)"
  echo "       Available document templates:"
  for t in "$ISABELLE_HOME_USER/DOF/document-template/"*.tex; do
    if [[ $t =~ root-(.*).tex$ ]]; then
      echo "       * ${BASH_REMATCH[1]}"
    fi
  done
  echo
  echo "  Prepare session root DIR (default: current directory)."
  echo
  exit 1
}

function fail()
{
  echo "$1" >&2
  exit 2
}


## process command line

# options

NAME=""
DEFAULT_TEMPLATE="scrartcl"
DEFAULT_ONTOLOGY="scholarly_paper"

TEMPLATE="$DEFAULT_TEMPLATE"
ONTOLOGY=""

while getopts "t:o:n:dh" OPT
do
  case "$OPT" in
    h)
      usage
      exit 1
      ;;
    n)
      NAME="$OPTARG"
      ;;
    o)
      if [ ! -f "$ISABELLE_HOME_USER/DOF/latex/DOF-$OPTARG.sty" ]; then
          echo "ERROR: Ontology $OPTARG not available!"
          exit 1
      fi
      ONTOLOGY="$ONTOLOGY $OPTARG"
      ;;
    t)
      TEMPLATE="$OPTARG"
      if [ ! -f "$ISABELLE_HOME_USER/DOF/document-template/root-$TEMPLATE.tex" ]; then
          echo "ERROR: Template $TEMPLATE not available!"
          exit 1
      fi
      ;;
    \?)
      usage
      exit 0
      ;;
  esac
done

shift $(($OPTIND - 1))

ONTOLOGY="${ONTOLOGY:-$DEFAULT_ONTOLOGY}"

# args

if [ "$#" -eq 0 ]; then
  DIR="."
elif [ "$#" -eq 1 ]; then
  DIR="$1"
  shift
else
  usage
fi

if [ -z "$NAME" ]; then
  NAME="$DIR"
fi

$ISABELLE_TOOL mkroot -n "$NAME" "$DIR"
echo "    \"preamble.tex\"" >> "$DIR"/ROOT
echo "    \"build\"" >> "$DIR"/ROOT
sed -i -e "s/root.tex/isadof.cfg/" "$DIR"/ROOT
sed -i -e "s/HOL/Isabelle_DOF/" "$DIR"/ROOT
rm -f "$DIR"/document/root.tex
  
# Creating isadof.cfg
echo "Template: $TEMPLATE" > "$DIR"/document/isadof.cfg
cp "$ISABELLE_HOME_USER/DOF/document-template/build" "$DIR"/document/
for o in $ONTOLOGY; do
  echo "Ontology: $o" >> "$DIR"/document/isadof.cfg;
done

# Creating praemble.tex
TITLE=$(echo "$NAME" | tr _ - | tr -d '\\')
AUTHOR=$(echo "By $USER" | tr _ - | tr -d '\\')
echo "%% This is a placeholder for user-specific configuration and packages." >> "$DIR"/document/preamble.tex
echo "\\title{$TITLE}{}{}{}{}{}{}" >> "$DIR"/document/preamble.tex
echo "\\author{$AUTHOR}{}{}{}{}{}" >> "$DIR"/document/preamble.tex
