import importlib.util
from pathlib import Path
import re

# Parse version from include/ceres/version.h so it stays in sync automatically.
_repo_root = Path(__file__).resolve().parents[2]
_version_header = (_repo_root / 'include' / 'ceres' / 'version.h').read_text(
    encoding='utf-8'
)
_major = re.search(
    r'#define\s+CERES_VERSION_MAJOR\s+(\d+)', _version_header
).group(1)
_minor = re.search(
    r'#define\s+CERES_VERSION_MINOR\s+(\d+)', _version_header
).group(1)
_patch = re.search(
    r'#define\s+CERES_VERSION_REVISION\s+(\d+)', _version_header
).group(1)

project = 'Ceres Solver'
copyright = '2026 Google Inc'
author = 'Sameer Agarwal, Keir Mierle & Others'
version = f'{_major}.{_minor}'
release = f'{_major}.{_minor}.{_patch}'

# Verify that package.xml matches include/ceres/version.h.
_package_xml = (_repo_root / 'package.xml').read_text(encoding='utf-8')
if f'<version>{release}</version>' not in _package_xml:
    raise RuntimeError(
        f'package.xml version does not match version.h ({release})'
    )

# Parse the latest stable release metadata from CITATION.cff for index.rst.
_citation_cff = (_repo_root / 'CITATION.cff').read_text(encoding='utf-8')
_stable_version = re.search(
    r'^version:\s*(\S+)', _citation_cff, re.MULTILINE
).group(1)
_stable_date = re.search(
    r'^date-released:\s*(\d{4})-(\d{2})-\d{2}', _citation_cff, re.MULTILINE
)
_stable_year = _stable_date.group(1)
_stable_month = str(int(_stable_date.group(2)))

rst_epilog = f"""
.. |stable_version| replace:: {_stable_version}
.. |stable_year| replace:: {_stable_year}
.. |stable_month| replace:: {_stable_month}
"""

extensions = [
    'sphinx.ext.todo',
    'sphinx.ext.mathjax',
    'sphinx.ext.ifconfig',
]
if importlib.util.find_spec('sphinx_copybutton') is not None:
    extensions.append('sphinx_copybutton')

templates_path = ['_templates']
master_doc = 'index'
exclude_patterns = []
nitpicky = True

# Enum and typedef identifiers used in member/function declarations whose
# values are documented inline rather than in standalone directives.
nitpick_ignore = [
    ('cpp:identifier', 'Context'),
    ('cpp:identifier', 'CovarianceAlgorithmType'),
    ('cpp:identifier', 'DenseLinearAlgebraLibraryType'),
    ('cpp:identifier', 'DoglegType'),
    ('cpp:identifier', 'DumpFormatType'),
    ('cpp:identifier', 'LineSearchDirectionType'),
    ('cpp:identifier', 'LineSearchInterpolationType'),
    ('cpp:identifier', 'LineSearchType'),
    ('cpp:identifier', 'LinearSolverOrderingType'),
    ('cpp:identifier', 'LinearSolverType'),
    ('cpp:identifier', 'LoggingType'),
    ('cpp:identifier', 'MinimizerType'),
    ('cpp:identifier', 'NonlinearConjugateGradientType'),
    ('cpp:identifier', 'Ownership'),
    ('cpp:identifier', 'PreconditionerType'),
    ('cpp:identifier', 'ResidualBlockId'),
    ('cpp:identifier', 'Solver'),
    ('cpp:identifier', 'SparseLinearAlgebraLibraryType'),
    ('cpp:identifier', 'TerminationType'),
    ('cpp:identifier', 'TrustRegionStrategyType'),
    ('cpp:identifier', 'VisibilityClusteringType'),
]

html_theme = 'furo'
html_title = 'Ceres Solver'
html_theme_options = {
    'source_repository': 'https://github.com/ceres-solver/ceres-solver',
    'source_branch': 'master',
    'source_directory': 'docs/source/',
}
html_context = {
    'ceres_doc_variant': 'dev',
    'stable_version': _stable_version,
}
html_extra_path = ['CNAME']
html_domain_indices = True
html_use_index = True
html_split_index = False
html_show_sourcelink = False
html_show_sphinx = False
html_show_copyright = True
htmlhelp_basename = 'CeresSolverdoc'
