"""
Teste pentru eticheta_scurta (US-006, PRD 5.8).

RED intai: scrise inainte de implementarea functiei.
Fisiere atinse: app/web/labels.py, tests/test_labels.py.
"""

import pytest

from app.web.labels import eticheta_scurta, eticheta_stare


# ---------------------------------------------------------------------------
# test_eticheta_scurta_pentru_fiecare_stare
# ---------------------------------------------------------------------------

def test_eticheta_scurta_pentru_fiecare_stare():
    """Fiecare stare cunoscuta intoarce eticheta scurta corecta (pill)."""
    cazuri = {
        "queued":        "In coada",
        "sending":       "Se trimite",
        "sent":          "Finalizat",
        "needs_mapping": "De mapat",
        "needs_data":    "Date lipsa",
        "error":         "Eroare",
    }
    for status, eticheta_asteptata in cazuri.items():
        rezultat = eticheta_scurta(status)
        assert rezultat == eticheta_asteptata, (
            f"Status {status!r}: asteptam {eticheta_asteptata!r}, got {rezultat!r}"
        )


def test_eticheta_scurta_stare_necunoscuta_ridica_keyerror():
    """Stare neacoperita ridica KeyError (ca sa prinda stari noi adaugate in schema)."""
    with pytest.raises(KeyError):
        eticheta_scurta("stare_inexistenta")


# ---------------------------------------------------------------------------
# test_eticheta_lunga_ramane_pentru_subtext
# ---------------------------------------------------------------------------

def test_eticheta_lunga_ramane_pentru_subtext():
    """eticheta_stare inca intoarce textele lungi neschimbate (compat cu template-uri)."""
    # Verificam fragmentele de text lung care existau inainte de US-006
    cazuri_lungi = {
        "queued":        "In asteptare",
        "sending":       "Se trimite acum",
        "sent":          "Declarate la RAR",
        "needs_mapping": "Lipseste codul",
        "needs_data":    "Date incomplete",
        "error":         "Eroare la trimitere",
    }
    for status, fragment in cazuri_lungi.items():
        text, subtext, css_class = eticheta_stare(status)
        assert fragment.lower() in text.lower(), (
            f"eticheta_stare({status!r}) text lung modificat — asteptam {fragment!r} in {text!r}"
        )
        # Verifica ca tuple-ul are exact 3 elemente (invariant arhitectura C1)
        assert isinstance(css_class, str) and css_class, (
            f"eticheta_stare({status!r}) trebuie sa aiba css_class non-vida la pozitia 3"
        )
