"""impressum_input_from_snapshot — Snapshot → ImpressumAgent-Input (pure).

Deckt die Glue des /snapshots/{id}/impressum-check-Endpoints ohne DB/LLM ab:
Text-Extraktion, Scope-Ableitung (Profil), company_name-Fallback, None-Pfad.
"""

from __future__ import annotations

from compliance.api.agent_check._agent_outputs import (
    impressum_input_from_snapshot,
)


def _snap(text: str = "x" * 200, **over) -> dict:
    s = {
        "doc_entries": [{"doc_type": "impressum", "text": text}],
        "profile": {}, "scan_context": None,
        "site_label": "BMW", "site_domain": "bmw.de",
    }
    s.update(over)
    return s


def test_builds_input_from_impressum_text():
    inp = impressum_input_from_snapshot(_snap())
    assert inp is not None
    assert inp["doc_type"] == "impressum"
    assert inp["text"].startswith("x")
    assert inp["company_name"] == "BMW"          # site_label-Fallback
    assert inp["origin_domain"] == "bmw.de"
    assert isinstance(inp["business_scope"], list)


def test_none_when_no_or_short_impressum_text():
    assert impressum_input_from_snapshot(_snap(doc_entries=[])) is None
    assert impressum_input_from_snapshot(
        {"doc_entries": [{"doc_type": "impressum", "text": "zu kurz"}]}) is None


def test_scope_includes_profile_derived():
    inp = impressum_input_from_snapshot(_snap(profile={"has_online_shop": True}))
    assert "ecommerce" in inp["business_scope"]


def test_company_name_prefers_profile_over_site_label():
    inp = impressum_input_from_snapshot(_snap(profile={"company_name": "ACME AG"}))
    assert inp["company_name"] == "ACME AG"
