# UNICADO - UNIversity Conceptual Aircraft Design and Optimization
#
# Copyright (C) 2025 UNICADO consortium
#
# This program 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.
#
# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
#
# Description:
# This file is part of UNICADO.

# === General site meta data ===
site_name: UNICADO                        # The name of the site, displayed in the header.
repo_url: https://git.rwth-aachen.de/unicado/unicado-package  # Link to the Git repository, will appear in the header.
repo_name: UNICADO Repository             # Name for the Git repository link in the header.
site_url: "https://unicado.pages.rwth-aachen.de/unicado.gitlab.io/" # The actual site url -> IMPORTANT: site-urls relies on this (site: will be replaced directly)!

# === Site configuration ===
markdown_extensions:
  - attr_list                             # Allows adding HTML attributes to Markdown elements (like classes).
  - admonition                            # Enables note/warning/admonition boxes with custom styling.
  - md_in_html                            # Allows writing Markdown inside HTML tags for flexibility.
  - footnotes                             # Allows footnotes
  - pymdownx.tabbed:                      # Enables tabbed content blocks, allowing content to be organized in tabs.
      alternate_style: true               # Uses an alternate style for tabbed blocks.
  - pymdownx.emoji:                       # Adds support for emojis using the Material theme’s emoji set.
      emoji_index: !!python/name:material.extensions.emoji.twemoji
      emoji_generator: !!python/name:material.extensions.emoji.to_svg
  - pymdownx.highlight:                   # Adds code syntax highlighting with custom line anchors.
      anchor_linenums: true               # Makes line numbers clickable in code blocks.
      line_spans: __span                  # Adds spans around lines for custom styling.
      pygments_lang_class: true           # Adds language class to highlighted code for styling consistency.
  - pymdownx.details                      # Enables collapsible details/summary blocks for content hiding/showing.
  - pymdownx.superfences:                 # Adds advanced fence syntax for blocks like code or tabs.
      custom_fences:
        - name: mermaid
          class: mermaid
          format: !!python/name:pymdownx.superfences.fence_code_format
  - pymdownx.inlinehilite                 # Allows inline code highlighting within text.
  - pymdownx.snippets                     # Enables code snippets for reusing code blocks across pages.
  - pymdownx.critic                       # Adds Critic Markup support for collaborative editing.
  - pymdownx.caret                        # Adds support for superscript text with a caret.
  - pymdownx.keys                         # Adds special styling for keyboard key indicators.
  - pymdownx.mark                         # Adds highlighting functionality for text.
  - pymdownx.tilde                        # Enables strikethrough formatting.
  - pymdownx.arithmatex:
      generic: true

# Additional JavaScript files to include for rendering mathematical notation
extra_javascript:
  - assets/javascripts/katex.js           # Local KaTeX script.
  - https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/katex.min.js  # CDN KaTeX script (same as local but hosted externally).
  - https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/contrib/auto-render.min.js  # KaTeX auto-render script (converts Latex syntax in formatted math).
  - assets/javascripts/mathjax.js         # Local MathJax script
  - https://unpkg.com/mathjax@3/es5/tex-mml-chtml.js  # MathJax renderer can be used for more complex formulas

# Additional CSS files to include for styling of website and mathematical notations (font, size etc.)
extra_css:
  - assets/css/unicado.css                # Custom CSS for styling the UNICADO site.
  - https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/katex.min.css  # CSS for KaTeX math rendering.

# === Plugins ===
plugins:
  - search
  - site-urls
  - bibtex:
      bib_dir: "./docs/assets/bibtex/"
  - mkdoxy:
      projects:
        propulsion_design:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "propulsion_design"
            OUTPUT_DIR: "docs/api/propulsion"
            BIBTEX_FILE: "docs/assets/bibtex/propulsion_design_literature.bib"
          src-dirs: ../aircraft-design/propulsion_design/src/
          full-doc: True
        ecological_assessment:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "ecological_assessment"
            OUTPUT_DIR: "docs/api/ecological_assessment"
            BIBTEX_FILE: "docs/assets/bibtex/ecological_assessment_literature.bib"
          src-dirs: ../aircraft-design/ecological_assessment/src/
          full-doc: True
        initial_sizing:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "initial_sizing"
            OUTPUT_DIR: "docs/api/initial_sizing"
            BIBTEX_FILE: "docs/assets/bibtex/initial_sizing_literature.bib"
          src-dirs: ../aircraft-design/initial_sizing/src/
          full-doc: true
        create_mission_xml:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "create_mission_xml"
            OUTPUT_DIR: "docs/api/create_mission_xml"
            BIBTEX_FILE: "docs/assets/bibtex/create_mission_xml_literature.bib"
          src-dirs: ../aircraft-design/create_mission_xml/src/
          full-doc: true
        fuselage_design:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "fuselage_design"
            OUTPUT_DIR: "docs/api/fuselage_design"
            BIBTEX_FILE: "docs/assets/bibtex/fuselage_design_literature.bib"
          src-dirs: ../aircraft-design/fuselage_design/src/
          full-doc: true
        wing_design:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "wing_design"
            OUTPUT_DIR: "docs/api/wing_design"
            BIBTEX_FILE: "docs/assets/bibtex/wing_design_literature.bib"
          src-dirs: ../aircraft-design/wing_design/src/
          full-doc: True
        empennage_design:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "empennage_design"
            OUTPUT_DIR: "docs/api/empennage_design"
          src-dirs: ../aircraft-design/empennage_design/src/
          full-doc: true
        tank_design:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "tank_design"
            OUTPUT_DIR: "docs/api/tank_design"
          src-dirs: ../aircraft-design/tank_design/src/
          full-doc: true
        landing_gear_design:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "landing_gear_design"
            OUTPUT_DIR: "docs/api/landing_gear_design"
          src-dirs: ../aircraft-design/landing_gear_design/src/
          full-doc: true
        systems_design:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "systems_design"
            OUTPUT_DIR: "docs/api/systems_design"
          src-dirs: ../aircraft-design/systems_design/src/
          full-doc: true
        aerodynamic_analysis:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "aerodynamic_analysis"
            OUTPUT_DIR: "docs/api/aerodynamic_analysis"
          src-dirs: ../aircraft-design/aerodynamic_analysis/src/
          full-doc: true
        aircraftGeometry2:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "aircraftGeometry2"
            OUTPUT_DIR: "docs/api/aircraftGeometry2"
          src-dirs: ../aircraft-design/libs/aircraftGeometry2/src/
          full-doc: true
        engine:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "engine"
            OUTPUT_DIR: "docs/api/engine"
          src-dirs: ../aircraft-design/libs/engine/src/
          full-doc: true
        mission_analysis:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "mission_analysis"
            OUTPUT_DIR: "docs/api/mission_analysis"
            BIBTEX_FILE: "docs/assets/bibtex/mission_analysis_literature.bib"
          src-dirs: ../aircraft-design/mission_analysis/src/
          full-doc: true
        weight_and_balance_analysis:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "weight_and_balance_analysis"
            OUTPUT_DIR: "docs/api/weight_and_balance_analysis"
          src-dirs: ../aircraft-design/weight_and_balance_analysis/src/
          full-doc: true
        performance_assesment:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "performance_assesment"
            OUTPUT_DIR: "docs/api/performance_assesment"
          src-dirs: ../aircraft-design/performance_assesment/src/
          full-doc: true
        cost_estimation:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "cost_estimation"
            OUTPUT_DIR: "docs/api/cost_estimation"
          src-dirs: ../aircraft-design/cost_estimation/src/
          full-doc: true
        aircraft_geometry2:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "aircraft_geometry2"
            OUTPUT_DIR: "docs/api/aircraft_geometry2"
          src-dirs: ../aircraft-design/libs/aircraftGeometry2/src/
          full-doc: true
        engine:
          doxyfile: Doxyfile
          variables:
            PROJECT_NAME: "engine"
            OUTPUT_DIR: "docs/api/engine"
          src-dirs: ../aircraft-design/libs/engine/src/
          full-doc: true
  - glightbox                             # Plugin for lightbox-style image and content viewing.

# === Theme configuration ===
theme:
  name: material                          # Specifies the theme name (alternatives: material, mkdocs, readthedocs).
  favicon: assets/favicon.png             # Path to the favicon image displayed in the browser tab (same as logo).
  logo: assets/images/logos/unicado-icon.png  # Path to the UNICADO logo displayed in the header.
  custom_dir: overrides                      # Directory for custom files (like footer).
  # Theme colors configuration
  palette:
   - scheme: slate
     primary: green
     accent: red

  # Feature configurations for navigation and ToC behavior
  features:
    - navigation.instant
    - navigation.top
    - navigation.path
    - navigation.tabs
    - navigation.tabs.sticky
    - navigation.indexes
    - toc.follow

  # Additional links (social) to display in the header
  extra:
    social:
      - icon: fontawesome/brands/github   # Icon for the GitHub link (uses FontAwesome icon set).
        link: https://git.rwth-aachen.de/unicado/unicado-package  # URL for the Git repository.
        name: "Unicado Repository"        # Name displayed when hovering over the repository icon.

# === Navigation Menu ===

nav:                                      # Customizes the main navigation structure of the site.
  - Home: index.md                     # Main page of the site.
  - Download:                             # Top-level navigation item for "Download".
    - Getting Started: download/getting-started.md  # Link to the getting started page.
    - Requirements: download/requirements.md  # Link to the installation requirements page.
    - Cleared for Take-Off: download/takeoff.md  # Link to the takeoff/getting started page.
    - Release Notes: download/release-notes.md
  - Tutorials:
    - Changing Design Specifications: tutorials/changing-design-specifications.md
    - "Video: Standalone Workflow": tutorials/standalone.mp4  # Link to the standalone tutorial video.
    - Separate Tool Execution: tutorials/seperate-tool-execution.md  # Link to the separate tool execution tutorial page.
  - Documentation:                        # Top-level item for documentation.
    - Overview: documentation/overview.md   # Overview of modules.
    - Aircraft Design:
      - Sizing:
          - documentation/sizing/index.md # Link to aircraft sizing documentation.
          - Initial Sizing:
            - Introduction: documentation/sizing/initial_sizing/index.md
            - Getting Started: documentation/sizing/initial_sizing/getting-started.md
            - Methods: documentation/sizing/initial_sizing/initialSizing.md
            - Changelog: documentation/sizing/initial_sizing/changelog.md
            - API Reference:
              - initial_sizing/classes.md
              - initial_sizing/namespaces.md
              - initial_sizing/files.md
              - initial_sizing/functions.md
          - Create Mission XML:
            - Introduction: documentation/sizing/create_mission_xml/index.md
            - Getting Started: documentation/sizing/create_mission_xml/getting_started.md
            - Mission Steps: documentation/sizing/create_mission_xml/mission_steps.md
          - Fuselage Design:
            - Introduction: documentation/sizing/fuselage_design/index.md
            - Getting Started: documentation/sizing/fuselage_design/getting_started.md
            - Design Method: documentation/sizing/fuselage_design/design_method.md
            - Run your First Design: documentation/sizing/fuselage_design/run_your_first_design.md
            - Software Architecture: documentation/sizing/fuselage_design/software_architecture.md
          # - API Reference: # TODO define for Python
          - Wing Design:
            - Introduction: documentation/sizing/wing_design/index.md
            - Getting Started: documentation/sizing/wing_design/getting-started.md
            - Design Method: documentation/sizing/wing_design/design-methods.md
            - Basic Concepts: documentation/sizing/wing_design/basic-concepts.md
            - Run your First Design: documentation/sizing/wing_design/run-your-first-wing-design.md
            - API Reference:
              - wing_design/classes.md
              - wing_design/namespaces.md
              - wing_design/files.md
              - wing_design/functions.md
          - Empennage Design:
            - Introduction: documentation/sizing/empennage_design/index.md
            - Getting Started: documentation/sizing/empennage_design/getting-started.md
            - Design Method: documentation/sizing/empennage_design/design-methods.md
            - Basic Concepts: documentation/sizing/empennage_design/basic-concepts.md
            - Run your First Design: documentation/sizing/empennage_design/run-your-first-empennage-design.md
            - API Reference:
              - empennage_design/classes.md
              - empennage_design/namespaces.md
              - empennage_design/files.md
              - empennage_design/functions.md
          - Tank Design:
            - Introduction: documentation/sizing/tank_design/index.md
            - Getting Started: documentation/sizing/tank_design/getting_started.md
            - Design Method: documentation/sizing/tank_design/tank_design_method.md
            - Run your First Design: documentation/sizing/tank_design/run_your_first_tank_design.md
            - Software Architecture: documentation/sizing/tank_design/software_architecture.md
            # - API Reference: # TODO define for Python
          - Propulsion Design:
            - Introduction: documentation/sizing/propulsion_design/index.md
            - Overview: documentation/sizing/propulsion_design/overview.md
            - Getting Started: documentation/sizing/propulsion_design/getting-started.md
            - Engineering Principles: documentation/sizing/propulsion_design/engineering_principles.md
            - Software Architecture: documentation/sizing/propulsion_design/software_architecture.md
            - Changelog: documentation/sizing/propulsion_design/changelog.md
            - Additional Information: documentation/sizing/propulsion_design/additional.md
            - API Reference:
              - propulsion_design/classes.md
              - propulsion_design/namespaces.md
              - propulsion_design/files.md
              - propulsion_design/functions.md
          - Landing Gear Design:
            - Introduction: documentation/sizing/landing_gear_design/index.md
            - Getting Started: documentation/sizing/landing_gear_design/getting_started.md
            - Design Method: documentation/sizing/landing_gear_design/design_method.md
            - Run your First Design: documentation/sizing/landing_gear_design/run_your_first_design.md
            - Software Architecture: documentation/sizing/landing_gear_design/software_architecture.md
            # - API Reference: # TODO define for Python
          - Systems Design:
            - Introduction: documentation/sizing/systems_design/index.md
            - Getting Started: documentation/sizing/systems_design/getting-started.md
            - Implemented Models: documentation/sizing/systems_design/systems.md
            - Software Architecture: documentation/sizing/systems_design/software_architecture.md
            - API Reference:
              - systems_design/classes.md
              - systems_design/namespaces.md
              - systems_design/files.md
              - systems_design/functions.md
      - Analysis:
          - documentation/analysis/index.md # Link to analysis module page.
          - Mission Analysis:
            - Introduction: documentation/analysis/mission_analysis/index.md
            - Getting Started: documentation/analysis/mission_analysis/getting_started.md
            - Mission Methods: documentation/analysis/mission_analysis/methods.md
            - Mission Steps: documentation/analysis/mission_analysis/mission_steps.md
            - API Reference:
              - mission_analysis/classes.md
              - mission_analysis/namespaces.md
              - mission_analysis/files.md
              - mission_analysis/functions.md
          - Weight and Balance Analysis:
            - Introduction: documentation/analysis/weight_and_balance_analysis/index.md
            - Basic Concepts: documentation/analysis/weight_and_balance_analysis/basic-concepts.md
            - Usage: documentation/analysis/weight_and_balance_analysis/usage.md
            # - API Reference: # TODO define for Python
          - Performance Assessment:
            - Introduction: documentation/analysis/performance_assessment/index.md
            - Getting Started: documentation/analysis/performance_assessment/getting_started.md
            - Capabilities:
              - Payload-Range Diagram: documentation/analysis/performance_assessment/payload_range_diagram.md
              - Takeoff Performance: documentation/analysis/performance_assessment/takeoff_performance.md
              - Landing Performance: documentation/analysis/performance_assessment/landing_performance.md
              - Flight Envelope: documentation/analysis/performance_assessment/flight_envelope.md
              - Ceiling Performance: documentation/analysis/performance_assessment/ceiling_performance.md
          - Cost Estimation:
            - Introduction: documentation/analysis/cost_estimation/index.md
            - Getting Started: documentation/analysis/cost_estimation/getting_started.md
            - Design Method: documentation/analysis/cost_estimation/operating_cost_method.md
            - Run your First Estimation: documentation/analysis/cost_estimation/run_your_first_cost_estimation.md
            - Software Architecture: documentation/analysis/cost_estimation/software_architecture.md
            # - API Reference: # TODO define for Python
          - Ecological Assessment:
            - Introduction: documentation/analysis/ecological_assessment/index.md
            - Basic Concepts: documentation/analysis/ecological_assessment/basic-concepts.md
            - Module Usage: documentation/analysis/ecological_assessment/usage.md
            - Software Architecture: documentation/analysis/ecological_assessment/software-architecture.md
            - Changelog: documentation/analysis/ecological_assessment/changelog.md
            - API Reference:
              - ecological_assessment/classes.md
              - ecological_assessment/namespaces.md
              - ecological_assessment/files.md
              - ecological_assessment/functions.md
          - Aerodynamic Analysis:
            - Introduction: documentation/analysis/aerodynamic_analysis/getting_started.md
            - Aerodynamic Principles: documentation/analysis/aerodynamic_analysis/aerodynamic_principles.md
            - Software Architecture: documentation/analysis/aerodynamic_analysis/software_architecture.md
          - Constraint Analysis:
            - Introduction: documentation/analysis/constraint_analysis/index.md
            - Principles: documentation/analysis/constraint_analysis/principles.md
    - Libraries:
        - documentation/libraries/index.md # Link to libraries overview.
        - AircraftGeometry2:
          - Introduction: documentation/libraries/aircraftGeometry2/index.md
          - Getting Started: documentation/libraries/aircraftGeometry2/getting-started.md
          - Tutorial:
            - Overview: documentation/libraries/aircraftGeometry2/tutorial.md
            - Geometry: documentation/libraries/aircraftGeometry2/tutorial-geometry.md
            - Factory: documentation/libraries/aircraftGeometry2/tutorial-factory.md
            - Convert: documentation/libraries/aircraftGeometry2/tutorial-convert.md
          - API Reference:
            - aircraftGeometry2/classes.md
            - aircraftGeometry2/namespaces.md
            - aircraftGeometry2/files.md
            - aircraftGeometry2/functions.md
        - engine:
          - Overview:
            - documentation/libraries/engine/index.md
          - API Reference:
            - engine/classes.md
            - engine/namespaces.md
            - engine/files.md
            - engine/functions.md
    - Utilities: documentation/additional-software.md
    - Workflow: 'workflow.md' # Link to the workflow page.
  - Get Involved:
    - Developer Guide: get-involved/developer-installation.md # Top-level item for contributions and development.
    - Build Instructions:
      - Prerequisites:
        - Windows: get-involved/build-instructions/build-environment/windows.md
        - Linux: get-involved/build-instructions/build-environment/linux.md
        - MacOS: get-involved/build-instructions/build-environment/macos.md
        - MSYS2/MinGW (deprecated): get-involved/build-instructions/build-environment/mingw.md
      - Get Source Code: get-involved/build-instructions/get-source-code.md
      - Build:
        - General: get-involved/build-instructions/build/general.md
        - C++: get-involved/build-instructions/build/cpp.md
        - Python: get-involved/build-instructions/build/python.md
        - CMake Presets: get-involved/build-instructions/build/cmake-presets.md
        - Include Libraries: get-involved/build-instructions/build/including-libraries.md
    - Module Development:
      - Module Structure in c++: get-involved/modularization/cpp-modularization.md
      - Module Structure in Python: get-involved/modularization/python-modularization.md
    - Style Guide:
      - C++: get-involved/style/cpp.md
      - Python: get-involved/style/python.md
    - Testing Guidelines: get-involved/testing.md
    - How to Contribute:                  # Subsection for contribution guidelines.
          - Basics: 'get-involved/how-to-contribute/contribute.md'
          - Code of Conduct: 'get-involved/how-to-contribute/code-of-conduct.md'
          - Merge Requests: 'get-involved/how-to-contribute/merge-request.md'
          - Review Merge Requests: 'get-involved/how-to-contribute/review-merge-request.md'
          - Contributor Tutorial:
            - Git Installation & Configuration: get-involved/how-to-contribute/contributor-tutorial/git-installation&configuration.md
            - "Video: Git Installation & Configuration": get-involved/how-to-contribute/contributor-tutorial/videos/Git_Installation&Configuration.mp4
            - "Video: Merge Request Workflow": get-involved/how-to-contribute/contributor-tutorial/videos/Merge_Request_Workflow.mp4
            - "Video: SSH Configuration" : get-involved/how-to-contribute/contributor-tutorial/videos/SSH_Configuration.mp4
    - IDE Setup: 'get-involved/ide-setup.md'
    - Release Package: 'get-involved/release-package.md'

  - About:                                # Top-level item for general site information.
      - About us: 'about.md'              # Link to the about page.
      - License: 'license.md'             # Link to license information.
      - Contact: 'contact.md'             # Link to contact page.
      - Partners: 'partners.md'           # Link to partners page.