#!/usr/bin/env bash
SHORTNAME=$(basename "$0")
COPYRIGHT="$(basename "$0") - Copyright 2020 Nebular Streams"

###########################
if [[ -z $1 ]]; then
  echo "Usage: $SHORTNAME targetFolder [namespace]"
  exit 1
fi
if [[ -z $2 ]]; then
  echo "Usage: $SHORTNAME targetFolder [namespace]"
  exit 1
fi

RELSCRIPTPATH="$(realpath "$0")"

SCRIPTPATH="$(
  cd "$(dirname "${RELSCRIPTPATH}")" >/dev/null 2>&1
  pwd -P
)"

SOURCEDIR="$(
  cd "$(dirname ".")" >/dev/null 2>&1
  pwd -P
)"

TARGETDIR=$1
NAMESPACE=$2

if [[ ! -f ${SOURCEDIR}/apidoc.json ]]; then
  echo "! ${SOURCEDIR} does not contain an apidoc.json file."
  exit 1
fi

if [[ -z ${NAMESPACE} ]]; then
  NAMESPACE=nobj
fi

echo ${COPYRIGHT}
echo "- Generating documentation into ${TARGETDIR}"

if [[ -d $TARGETDIR ]]; then
  if [[ -f $TARGETDIR/index.html ]]; then
    rm -rf "${TARGETDIR}"
  else
    echo "! ${TARGETDIR} does not seem a target folder."
    exit 1
  fi
fi

mkdir -p "${TARGETDIR}"

cd "${SOURCEDIR}" || exit 255

[[ -d /tmp/apidoc ]] && rm -rf /tmp/apidoc
mkdir /tmp/apidoc

if [[ -d ./node_modules ]]; then
  echo "- including source from node_modules with namespace ${NAMESPACE}"
  # modules starting with NAMESPACE- follow api/ convention
  cp ./node_modules/${NAMESPACE}-*/api/*.js /tmp/apidoc/ 2>/dev/null
  cp ./node_modules/${NAMESPACE}-*/*/api/*.js /tmp/apidoc/ 2>/dev/null
fi

# "customize the style" - dirty hack !
if [[ -f "${SCRIPTPATH}/doc/${NAMESPACE}/apidoc.css" ]]; then
  cp "${SCRIPTPATH}/doc/${NAMESPACE}/apidoc.css" "${SCRIPTPATH}/../node_modules/apidoc/template/css/style.css"
  if [[ -f ${SOURCEDIR}/apidoc.css ]]; then
     cat "${SOURCEDIR}/apidoc.css" >> "${SCRIPTPATH}/../node_modules/apidoc/template/css/style.css"
  fi
fi

touch /tmp/apidoc/__void__.js

${SCRIPTPATH}/../node_modules/.bin/apidoc -i . -i /tmp/apidoc -e node_modules -o "${TARGETDIR}"

echo "👌 Documentation generated."
