#!/usr/bin/env bash

if ! hash uuidgen 2>/dev/null; then
  echo >&2 "... uuidgen dependency not met. Please install."
  exit 1
fi

INCLUDEDIR="$2/doc/source/_includes"

declare -A charReplacements

charReplacements=(
   ["-"]="minus"
   ["+"]="plus"
   ["\@"]="at"
   ["\&"]="and"
)

ask_name () {

   echo -e "`cat <<EOF

   You are about to create a new reStructuredText file in

   ${WD}

   or a content fragment file in doc/source/_includes

   If this is not what you want, press CTL-C to quit and change to the directory
   you want to create the file in.

   Enter a title for the new topic. The file name and topic label used for
   linking will be based on this value.


EOF`"


    while read -e -p 'Topic title: ' title ; do
      if [[ -z $title ]]; then
         continue
      else
         break
      fi
    done

}



ask_type () {

  echo -e "`cat <<EOF

  Thanks. Now choose a topic type. Enter one of the following characters:

    t) A task topic. Will contain the outline of a procedure.
    i) An index.
    r) A reference topic. Will contain a minimal list-table definition.
    g) A minimal generic topic.
    f) A content fragment included in an rST file. Will be saved to doc/source/_includes.

EOF`"

    while read -p 'Topic type: ' -n1 input; do

       case $input in

           t|i|r|g|f)
              break
             ;;

           *)
             echo -e "Enter a valid value"
             continue
             ;;

        esac

    done

}

write_stub () {

   if [[ $input == "f" ]]; then
     outdir=$INCLUDEDIR
     ext="rest"
   else
     outdir=$WD
     ext="rst"
   fi

   echo "$1" > "${outdir}/${filename}.${ext}"
   if [[ -f ${outdir}/${filename}.${ext} ]]; then
     echo -e "\nCreated ${outdir}/${filename}.${ext}"
     exit 0
   else
     exit 1
   fi

}


WD=$1

myuuid=$(uuidgen)

# Keep as fallback?
# myuuid="$(od -x /dev/urandom | head -1 | awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}')"


myuuid="${myuuid:24:35}"

ask_name

strike=$(for ((i=1; i<=${#title}; i++)); do
  printf '=%.0s' "$i"
done)


ask_type

filename=${title}

for c in "${!charReplacements[@]}"
do
  filename=`sed "s/$c/${charReplacements[$c]}/g" <<< $filename`
done

filename="${filename//[^[:alnum:]]/-}"
filename=$(echo $filename | tr -s -)
filename="${filename}-${myuuid}"
filename=${filename,,}
filename=`sed 's/--/-/g' <<< $filename`

[ $input == "i" ] && filename="index-${filename}"

CONTEXT_DIR="${BASH_SOURCE%/*}"
if [[ ! -d "$CONTEXT_DIR" ]]; then CONTEXT_DIR="$PWD"; fi
. "$CONTEXT_DIR/templates/topic-templates.txt"

case $input in

   t)
     write_stub "${task}"
     ;;

   i)
     write_stub "${index}"
     ;;

   r)
      write_stub "${reference}"
      ;;

   g)
      write_stub "${topic}"
      ;;

   f)
      write_stub "${include}"
      ;;

   *)
      echo -e "$input not valid"
      ;;

esac