# Copyright 2020 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
"""Pigweed's Sphinx configuration."""

from datetime import date
import sphinx

# The suffix of source filenames.
source_suffix = ['.rst']

# The master toctree document.  # inclusive-language: ignore
master_doc = 'index'

# General information about the project.
project = 'Pigweed'
copyright = f'{date.today().year} The Pigweed Authors'  # pylint: disable=redefined-builtin

# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '0.1'
# The full version, including alpha/beta/rc tags.
release = '0.1.0'

# The class of the Pygments (syntax highlighting) style to use.
pygments_style = 'pw_console.pigweed_code_style.PigweedCodeLightStyle'
pygments_dark_style = 'pw_console.pigweed_code_style.PigweedCodeStyle'

extensions = [
    'pw_docgen.sphinx.google_analytics',  # Enables optional Google Analytics
    'pw_docgen.sphinx.module_metadata',
    'pw_docgen.sphinx.seed_metadata',
    'sphinx.ext.autodoc',  # Automatic documentation for Python code
    'sphinx.ext.napoleon',  # Parses Google-style docstrings
    'sphinxarg.ext',  # Automatic documentation of Python argparse
    'sphinxcontrib.mermaid',
    'sphinx_design',
]

# When a user clicks the copy-to-clipboard button the `$ ` prompt should not be
# copied: https://sphinx-copybutton.readthedocs.io/en/latest/use.html
copybutton_prompt_text = "$ "

_DIAG_HTML_IMAGE_FORMAT = 'SVG'
blockdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT
nwdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT
seqdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT
actdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT
rackdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT
packetdiag_html_image_format = _DIAG_HTML_IMAGE_FORMAT

# Tell m2r to parse links to .md files and add them to the build.
m2r_parse_relative_links = True

# The theme to use for HTML and HTML Help pages.  See the documentation for
# a list of builtin themes.
html_theme = 'furo'

# The name for this set of Sphinx documents.  If None, it defaults to
# "<project> v<release> documentation".
html_title = 'Pigweed'

# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
html_use_smartypants = True

# If false, no module index is generated.
html_domain_indices = True

html_favicon = 'docs/_static/pw_logo.ico'
html_logo = 'docs/_static/pw_logo.svg'

# If false, no index is generated.
html_use_index = True

# If true, the index is split into individual pages for each letter.
html_split_index = False

# If true, links to the reST sources are added to the pages.
html_show_sourcelink = False

# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
html_show_sphinx = False

# These folders are copied to the documentation's HTML output
html_static_path = ['docs/_static']

# These paths are either relative to html_static_path
# or fully qualified paths (eg. https://...)
html_css_files = [
    'css/pigweed.css',
    # Needed for Inconsolata font.
    'https://fonts.googleapis.com/css2?family=Inconsolata&display=swap',
    # FontAwesome for mermaid and sphinx-design
    "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css",
]

html_js_files = ['js/pigweed.js']

# Furo color theme variables based on:
# https://github.com/pradyunsg/furo/blob/main/src/furo/assets/styles/variables/_colors.scss
# Colors with unchanged defaults are left commented out for easy updating.
html_theme_options = {
    'light_css_variables': {
        # Make the logo text more amaranth-like
        'color-sidebar-brand-text': '#b529aa',
        'color-sidebar-search-border': '#b529aa',
        'color-sidebar-link-text--top-level': '#85004d',
        'color-sidebar-link-text': '#016074',
        'color-sidebar-item-background--current': '#f0f0f0',
        'color-sidebar-item-background--hover': '#ffe2f3',
        'color-sidebar-item-expander-background--hover': '#ffe2f3',
        # Function signature colors
        'color-api-function-border': '#cccccc',
        'color-api-function-background': '#f0f0f0',
        'color-api-class-background': '#e7f2fa',
        'color-api-class-foreground': '#2980b9',
        'color-api-class-border': '#6ab0de',
        # Namespace::
        'color-api-pre-name': '#2980b9',
        # Function name
        'color-api-name': '#2980b9',
        'color-inline-code-background': '#fafafa',
        'color-inline-code-border': '#cccccc',
        'color-text-selection-background': '#1d5fad',
        'color-text-selection-foreground': '#ffffff',
        # Background color for focused headings.
        'color-highlight-on-target': '#ffffcc',
        # Background color emphasized code lines.
        'color-code-hll-background': '#ffffcc',
        'color-section-button': '#b529aa',
        'color-section-button-hover': '#fb71fe',
    },
    'dark_css_variables': {
        'color-sidebar-brand-text': '#fb71fe',
        'color-sidebar-search-border': '#e815a5',
        'color-sidebar-link-text--top-level': '#ff79c6',
        'color-sidebar-link-text': '#8be9fd',
        'color-sidebar-item-background--current': '#2a3037',
        'color-sidebar-item-background--hover': '#30353d',
        'color-sidebar-item-expander-background--hover': '#4c333f',
        # Function signature colors
        'color-api-function-border': '#575757',
        'color-api-function-background': '#2b2b2b',
        'color-api-class-background': '#222c35',
        'color-api-class-foreground': '#87c1e5',
        'color-api-class-border': '#5288be',
        # Namespace::
        'color-api-pre-name': '#87c1e5',
        # Function name
        'color-api-name': '#87c1e5',
        'color-code-background': '#2d333b',
        'color-inline-code-background': '#2d333b',
        'color-inline-code-border': '#575757',
        'color-text-selection-background': '#2674bf',
        'color-text-selection-foreground': '#ffffff',
        # Background color for focused headings.
        'color-highlight-on-target': '#ffc55140',
        # Background color emphasized code lines.
        'color-code-hll-background': '#ffc55140',
        'color-section-button': '#fb71fe',
        'color-section-button-hover': '#b529aa',
        # The following color changes modify Furo's default dark mode colors for
        # slightly less high-contrast.
        # Base Colors
        # 'color-foreground-primary': '#ffffffcc', # Main text and headings
        # 'color-foreground-secondary': '#9ca0a5', # Secondary text
        # 'color-foreground-muted': '#81868d', # Muted text
        # 'color-foreground-border': '#666666', # Content borders
        'color-background-primary': '#1c2128',  # Content
        'color-background-secondary': '#22272e',  # Navigation and TOC
        'color-background-hover': '#30353dff',  # Navigation-item hover
        'color-background-hover--transparent': '#30353d00',
        'color-background-border': '#444c56',  # UI borders
        'color-background-item': '#373e47',  # "background" items (eg: copybutton)
        # Announcements
        # 'color-announcement-background': '#000000dd',
        # 'color-announcement-text': '#eeebee',
        # Brand colors
        # 'color-brand-primary': '#2b8cee',
        # 'color-brand-content': '#368ce2',
        # Highlighted text (search)
        # 'color-highlighted-background': '#083563',
        # GUI Labels
        # 'color-guilabel-background': '#08356380',
        # 'color-guilabel-border': '#13395f80',
        # API documentation
        # 'color-api-keyword': 'var(--color-foreground-secondary)',
        # 'color-highlight-on-target': '#333300',
        # Admonitions
        'color-admonition-background': 'var(--color-background-secondary)',
        # Cards
        'color-card-border': 'var(--color-background-border)',
        'color-card-background': 'var(--color-background-secondary)',
        # 'color-card-marginals-background': 'var(--color-background-hover)',
        # Sphinx Design cards
        'sd-color-card-background': 'var(--color-background-secondary)',
        'sd-color-card-border': 'var(--color-background-border)',
    },
}

mermaid_init_js = '''
mermaid.initialize({
  startOnLoad: true,
  // sequenceDiagram Note text alignment
  noteAlign: "left",
  // Set mermaid theme to the current furo theme
  theme: localStorage.getItem("theme") == "dark" ? "dark" : "default"
});
'''

# Output file base name for HTML help builder.
htmlhelp_basename = 'Pigweeddoc'

# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [('index', 'pigweed', 'Pigweed', ['Google'], 1)]

# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
#  dir menu entry, description, category)
texinfo_documents = [
    (
        'index',
        'Pigweed',
        'Pigweed',
        'Google',
        'Pigweed',
        'Firmware framework',
        'Miscellaneous',
    ),
]

templates_path = ['docs/layout']
exclude_patterns = ['docs/templates/**']

breathe_projects = {
    # Assuming doxygen output is at out/docs/doxygen/
    # This dir should be relative to out/docs/gen/docs/pw_docgen_tree/
    "Pigweed": "./../../../doxygen/xml/",
}

breathe_default_project = "Pigweed"

breathe_debug_trace_directives = True

# Treat these as valid attributes in function signatures.
cpp_id_attributes = [
    "PW_EXTERN_C_START",
    "PW_NO_LOCK_SAFETY_ANALYSIS",
]
# This allows directives like this to work:
# .. cpp:function:: inline bool try_lock_for(
#     chrono::SystemClock::duration timeout) PW_EXCLUSIVE_TRYLOCK_FUNCTION(true)
cpp_paren_attributes = [
    "PW_EXCLUSIVE_TRYLOCK_FUNCTION",
    "PW_EXCLUSIVE_LOCK_FUNCTION",
    "PW_UNLOCK_FUNCTION",
    "PW_NO_SANITIZE",
]
# inclusive-language: disable
# Info on cpp_id_attributes and cpp_paren_attributes
# https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-cpp_id_attributes
# inclusive-language: enable

# Disable Python type hints
# autodoc_typehints = 'none'


def do_not_skip_init(app, what, name, obj, would_skip, options):
    if name == "__init__":
        return False  # never skip __init__ functions
    return would_skip


# Problem: CSS files aren't copied after modifying them. Solution:
# https://github.com/sphinx-doc/sphinx/issues/2090#issuecomment-572902572
def env_get_outdated(app, env, added, changed, removed):
    return ['index']


def setup(app):
    app.add_css_file('css/pigweed.css')
    app.connect('env-get-outdated', env_get_outdated)
    app.connect("autodoc-skip-member", do_not_skip_init)
