#!/bin/bash

cd "$(hg root)/fbcode/thrift/website" || exit

# Install doxygen
feature install fb_doxygen

# Copy js components
cp -r ../../../fbcode/staticdocs/websites/fbcref/src/components src

# Generate API documentation
# note the .*: --allowlist accepts python regexes
buck2 run //fbcref/docgen:maker -- \
  --fbcode-root ../.. \
  --project-roots .. \
  --doxyfile ../../fbcref/Doxyfile \
  --doxygen-output /tmp/doxygen_thrift_output \
  --website . \
  --ref-path ref/cpp \
  --allowlist \
    'thrift/lib/cpp/TProcessorEventHandler.h' \
    'thrift/lib/cpp/protocol/TCompactProtocol.*' \
    'thrift/lib/cpp2/protocol/Patch.h' \
    'thrift/lib/cpp2/FieldRef.h' \
    'thrift/lib/cpp2/op/.*' \
    'thrift/lib/thrift/detail/.*'

# Make the table of contents
toc=$(cat << EOTOC
Hooks
  cpp/class/apache/thrift/TProcessorEventHandler

Serialization
  cpp/class/apache/thrift/protocol/TCompactProtocolT

Field Access
  cpp/class/apache/thrift/field_ref

Operator Library
  cpp/file/thrift/lib/cpp2/op/Clear.h
  cpp/file/thrift/lib/cpp2/op/Compare.h
  cpp/file/thrift/lib/cpp2/op/Copy.h
  cpp/file/thrift/lib/cpp2/op/Create.h
  cpp/file/thrift/lib/cpp2/op/Encode.h
  cpp/file/thrift/lib/cpp2/op/Get.h
  cpp/file/thrift/lib/cpp2/op/Hash.h
  cpp/file/thrift/lib/cpp2/op/Patch.h

Static Patch
  cpp/class/apache/thrift/op/detail/AssignPatch
  cpp/class/apache/thrift/op/detail/ListPatch
  cpp/class/apache/thrift/op/detail/SetPatch
  cpp/class/apache/thrift/op/detail/MapPatch
  cpp/class/apache/thrift/op/detail/FieldPatch
  cpp/class/apache/thrift/op/detail/StructPatch
  cpp/class/apache/thrift/op/detail/UnionPatch
  cpp/class/apache/thrift/op/detail/StringPatch
  cpp/class/apache/thrift/op/detail/BinaryPatch
  cpp/class/apache/thrift/op/detail/NumberPatch
  cpp/class/apache/thrift/op/detail/BoolPatch
  cpp/class/apache/thrift/op/detail/AnyPatch

Dynamic Patch
  cpp/file/thrift/lib/cpp2/protocol/Patch.h
EOTOC
)
python3 ../../fbcref/docgen/tocgen.py "$toc" > src/json/cpp_api_toc.json
