"""resolve.py — Bundle-Root-basierte Pfad-Auflösung für den Designsystem-Layer.

Analog `_lib/config_loader.py::_find_bundle_root`. Konsumenten in Wave H
rufen `resolve_designsystem()` ohne Argument und bekommen den absoluten
Pfad zu `_lib/designsystem/` (mit render.py darin) zurück.

Deterministisch (Pflicht-Satz 6): keine Try-Except-Fallbacks, klarer Fehler
wenn nichts gefunden wird.
"""
from __future__ import annotations

from pathlib import Path


def _find_bundle_root(start: Path) -> Path | None:
    """Sucht bundle.json aufwärts vom start-Verzeichnis (max. 10 Ebenen)."""
    current = start.resolve()
    for _ in range(10):
        if (current / "bundle.json").is_file():
            return current
        parent = current.parent
        if parent == current:
            break
        current = parent
    return None


def resolve_designsystem(bundle_root: Path | None = None) -> Path:
    """Findet den absoluten Pfad zu `_lib/designsystem/` im Bundle.

    Args:
        bundle_root: Optional. Wenn None, sucht der Loader bundle.json
            aufwärts ab dieser Datei (max. 10 Ebenen).

    Returns:
        Absoluter Pfad zum `_lib/designsystem/`-Verzeichnis.

    Raises:
        FileNotFoundError: Wenn weder das übergebene `bundle_root` noch
            die Aufwärtssuche zu einer gültigen Bundle-Wurzel führt, oder
            wenn das Designsystem-Verzeichnis fehlt.
    """
    if bundle_root is None:
        bundle_root = _find_bundle_root(Path(__file__).resolve().parent)
    if bundle_root is None:
        raise FileNotFoundError(
            "Bundle-Wurzel (bundle.json) nicht gefunden. "
            "resolve_designsystem() braucht entweder ein explizites bundle_root-"
            "Argument oder muss aus einem Bundle-Kontext (mit bundle.json) "
            "aufgerufen werden."
        )
    designsystem = bundle_root / "_lib" / "designsystem"
    if not designsystem.is_dir():
        raise FileNotFoundError(
            f"Bundle-Wurzel '{bundle_root}' enthält kein _lib/designsystem/."
        )
    return designsystem
