#!/bin/bash
#
# Copyright (C) 2021 Associated Universities, Inc. Washington DC, USA.
#
# This file is part of NRAO Workspaces.
#
# Workspaces is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Workspaces is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Workspaces.  If not, see <https://www.gnu.org/licenses/>.

# Regenerate the API documentation for the project.
#
# A handy trick in case we build new modules and need to bring them into the documentation system.

# remove the existing source/api folder
rm -rf source/api

# go into the source folder
pushd source

# for each application we have, run sphinx-apidocs
for setup in $(find ../../apps/cli ../../services ../../shared -name pyproject.toml); do
  dir=$(dirname $setup)
  sphinx-apidoc -o api/$(basename $dir) $dir $dir/pyproject.toml $dir/test $dir/tests
done

# generate the header for the API index
cat > api/index.rst <<'EOF'
.. Workspaces documentation master file, created by
   sphinx-quickstart on Thu Oct 15 14:12:32 2020.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

API Documentation
--------------------------------------------

.. toctree::
   :maxdepth: 1

EOF

find . -name \*.bak -delete
find . -name modules.rst | sed 's|\./api/|   |g; s|\.rst||g' >> api/index.rst

cat >> api/index.rst <<EOF
EOF


# generate the architecture API index
cat > architecture.rst <<'EOF'
Architecture
============

The following pages are notes from the ARCHITECTURE.md files.

Contents:

.. toctree::
   :maxdepth: 2

EOF

# go into the architecture folder
rm -rf architecture
mkdir architecture

pushd architecture
for file in $(find ../../.. -type d \( -path ../../../lustre -o -path ../../../pgdata \) -prune -o -name ARCHITECTURE.rst -print); do
  rstfile=$(basename $(dirname $file)).rst
  ln -s $file $rstfile
  echo "   architecture/$rstfile" >> ../architecture.rst
done
popd


# generate the README index
cat > tools.rst <<'EOF'
Workspaces Tools
============

Workspaces relies on many small command line tools to function. A few of these tools are intended for developers or DAs
to use. The rest are mostly internal utilities that should never be used by humans directly.

Of particular interest to the DAs are the following tools:

- :doc:`SECI ingestion status tool<tools/seci_ingestion_status>`
- :doc:`Workspaces Mediator<tools/mediator>`
- :doc:`Workflow Annihilator<tools/ws_annihilator>` (only sometimes, it’s run by cron job)
- :doc:`Workspaces Metrics<tools/ws_metrics>`
- :doc:`Analyst Management Tool<tools/mod_analyst>`
- :doc:`Data Annotation Tool<tools/data_annotator>`

Contents:

.. toctree::
   :maxdepth: 1


EOF
# go into the tools folder
rm -rf tools
mkdir tools

pushd tools
for file in $(find ../../../apps/cli/executables -name .pytest_cache -prune -o -name README.md -print | sort); do
  mdfile=$(basename $(dirname $file)).md
  ln -s $file $mdfile
  echo "   tools/$mdfile" >> ../tools.rst
done
popd


popd
