"""Local Cookbook dependency detection — distribution-name mapping (issue #1020).

The Cookbook → Dependencies tab reported `llama-cpp-python[server]` as "not
installed" even when it was installed. The local check looked up distribution
metadata under `pkg["name"].replace("_", "-")` → "llama-cpp", but the import
module `llama_cpp` ships in the **llama-cpp-python** distribution, so
`importlib.metadata.version("llama-cpp")` raised PackageNotFoundError and the
package was marked missing. The fix derives the distribution name from the
package's declared pip spec instead.
"""

from pathlib import Path

from routes.shell_routes import _pip_dist_name


def test_llama_cpp_maps_to_llama_cpp_python_distribution():
    pkg = {"name": "llama_cpp", "pip": "llama-cpp-python[server]"}
    assert _pip_dist_name(pkg) == "llama-cpp-python"
    # The old behaviour (munging the import name) produced the wrong dist name.
    assert _pip_dist_name(pkg) != "llama-cpp"


def test_extras_and_version_markers_are_stripped():
    assert _pip_dist_name({"name": "diffusers", "pip": "diffusers[torch]"}) == "diffusers"
    assert _pip_dist_name({"name": "sglang", "pip": "sglang[all]"}) == "sglang"
    assert _pip_dist_name({"name": "rembg", "pip": "rembg[gpu]"}) == "rembg"
    assert _pip_dist_name({"name": "x", "pip": "foo>=1.2,<2"}) == "foo"
    assert _pip_dist_name({"name": "y", "pip": "bar==1.0 ; python_version>='3.9'"}) == "bar"


def test_plain_names_pass_through():
    assert _pip_dist_name({"name": "vllm", "pip": "vllm"}) == "vllm"
    assert _pip_dist_name({"name": "playwright", "pip": "playwright"}) == "playwright"
    assert _pip_dist_name({"name": "hf_transfer", "pip": "hf_transfer"}) == "hf_transfer"


def test_falls_back_to_import_name_when_no_pip_spec():
    # System rows (tmux/docker) declare no pip spec; fall back to the munged name.
    assert _pip_dist_name({"name": "some_mod", "pip": ""}) == "some-mod"
    assert _pip_dist_name({"name": "tmux"}) == "tmux"


def test_route_uses_dist_name_helper_not_munged_import_name():
    """Lock the wiring: the local package check must look up metadata by the
    derived distribution name, not the old `name.replace('_','-')` (the exact
    bug that hid llama-cpp-python)."""
    src = (Path(__file__).resolve().parents[1] / "routes" / "shell_routes.py").read_text(encoding="utf-8")
    assert "importlib_metadata.version(_pip_dist_name(pkg))" in src
    assert 'importlib_metadata.version(pkg["name"].replace("_", "-"))' not in src
