find_package(Doxygen REQUIRED OPTIONAL_COMPONENTS dot)

set(DOXYGEN_GENERATE_HTML      "YES")
set(DOXYGEN_DISABLE_INDEX       "NO")
set(DOXYGEN_GENERATE_TREEVIEW  "YES") # left-hand index
set(DOXYGEN_SORT_GROUP_NAMES    "NO")
set(DOXYGEN_SORT_BRIEF_DOCS     "NO")
set(DOXYGEN_SORT_MEMBER_DOCS    "NO")
set(DOXYGEN_COLLABORATION_GRAPH "NO")
set(DOXYGEN_INCLUDE_GRAPH       "NO")
set(DOXYGEN_INCLUDED_BY_GRAPH   "NO")
set(DOXYGEN_GRAPHICAL_HIERARCHY "NO")
set(DOXYGEN_CLASS_GRAPH         "NO")
set(DOXYGEN_CLASS_DIAGRAMS      "NO")

set(DOXYGEN_HTML_COLORSTYLE     "LIGHT")

set(DOXYGEN_HTML_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/../html/")

set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "${CMAKE_CURRENT_SOURCE_DIR}/../README.md")
set(DOXYGEN_HTML_EXTRA_STYLESHEET  "${CMAKE_CURRENT_SOURCE_DIR}/asgard.css")
set(DOXYGEN_HTML_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/header.html")
set(DOXYGEN_HTML_FOOTER "${CMAKE_CURRENT_SOURCE_DIR}/footer.html")

set(DOXYGEN_HTML_COLORSTYLE_HUE    "146")
set(DOXYGEN_HTML_COLORSTYLE_SAT    "100")
set(DOXYGEN_HTML_COLORSTYLE_GAMMA  "190")

set(DOXYGEN_PROJECT_NAME "ASGarD - Adaptive Sparse Grid Discretization v${asgard_VERSION_MAJOR}.${asgard_VERSION_MINOR}.${asgard_VERSION_PATCH}")
set(DOXYGEN_PROJECT_NUMBER "")

set(DOXYGEN_EXAMPLE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../src/;${CMAKE_CURRENT_SOURCE_DIR}/../examples/")

set(DOXYGEN_FORMULA_FONTSIZE "20")

if (NOT DOXYGEN_INTERNAL_DOCS)
    # the \internal command works for functions and namespaces, but not classes
    # have to exclude the classes manually
    set(DOXYGEN_EXCLUDE_SYMBOLS asgard::vecstrview asgard::split_views
        asgard::time_advance::steady_state    asgard::time_advance::rungekutta
        asgard::time_advance::crank_nicolson  asgard::time_advance::imex_stepper
        asgard::time_advance_manager          asgard::moment_manager
        asgard::refinement_manager)

    set(DOXYGEN_PREDEFINED "__ASGARD_DOXYGEN_SKIP;__ASGARD_DOXYGEN_SKIP_INTERNAL;ASGARD_USE_MPI;ASGARD_USE_GPU")
endif()

doxygen_add_docs(asgard_doxygen
                 README.md
                 doxygen/installation.md
                 doxygen/basic_usage.md
                 doxygen/plotting.md
                 doxygen/MPI.md
                 src/asgard.hpp
                 src/asgard_discretization.hpp
                 src/asgard_program_options.hpp
                 src/asgard_reconstruct.hpp
                 src/asgard_function_defs.hpp
                 src/asgard_indexset.hpp
                 src/asgard_momentset.hpp
                 src/asgard_domain.hpp
                 src/asgard_pde.hpp
                 src/pde/continuity_2d.cpp
                 src/pde/inputs_1d.cpp
                 src/pde/continuity.cpp
                 src/pde/diffusion.cpp
                 src/pde/elliptic.cpp
                 src/pde/robin_bc.cpp
                 src/pde/spherical_diffusion.cpp
                 src/pde/sinwav.cpp
                 src/pde/two_stream.cpp
                 src/pde/vplb.cpp
                 src/pde/sod_shock.cpp
                 src/pde/burgers.cpp
                 src/pde/bgk.cpp
                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../
                 COMMENT "Building the ${PROJECT_NAME} documentation")

# asgard_doxygen is not automatically added to "all"
# must add a dependence to ensure it will build
add_dependencies(asgard_exe asgard_doxygen)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../html DESTINATION "share/asgard/docs")
