"""Backend tests for iteration 9 bug fixes:
- Scraper patente cached (BBFL71)
- Scraper patente not_found for unknown patente (ZZZZZ1)
- Buscar-imei predictive returns 866381
"""
import os
import pytest
import requests

BASE_URL = os.environ.get("REACT_APP_BACKEND_URL", "https://doc-manager-111.preview.emergentagent.com").rstrip("/")

ADMIN_EMAIL = "admin4sat@demo.com"
ADMIN_PASSWORD = "Test1234!"


@pytest.fixture(scope="module")
def admin_headers():
    r = requests.post(
        f"{BASE_URL}/api/auth/login",
        json={"email": ADMIN_EMAIL, "password": ADMIN_PASSWORD},
        timeout=15,
    )
    assert r.status_code == 200, f"Login failed: {r.status_code} {r.text}"
    token = r.json()["access_token"]
    return {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}


class TestScraperPatente:
    def test_bbfl71_cached(self, admin_headers):
        r = requests.get(
            f"{BASE_URL}/api/gestion4sat/scraper/patente/BBFL71",
            headers=admin_headers, timeout=60,
        )
        assert r.status_code == 200, r.text
        data = r.json()
        assert data.get("source") == "cache", f"Expected source=cache, got {data.get('source')}"
        assert data.get("datos") is not None
        assert data["datos"].get("marca", "").upper() == "NISSAN"

    def test_zzzzz1_not_found_no_crash(self, admin_headers):
        r = requests.get(
            f"{BASE_URL}/api/gestion4sat/scraper/patente/ZZZZZ1",
            headers=admin_headers, timeout=60,
        )
        assert r.status_code == 200, f"Should not crash for unknown patente: {r.status_code} {r.text}"
        data = r.json()
        assert data.get("datos") is None, f"Expected datos=null, got {data.get('datos')}"
        assert data.get("source") == "not_found", f"Expected source=not_found, got {data.get('source')}"


class TestBuscarImei:
    def test_buscar_imei_866381(self, admin_headers):
        r = requests.get(
            f"{BASE_URL}/api/gestion4sat/dispositivos/buscar-imei?q=866381",
            headers=admin_headers, timeout=15,
        )
        assert r.status_code == 200, r.text
        data = r.json()
        assert "resultados" in data
        resultados = data["resultados"]
        assert isinstance(resultados, list)
        assert len(resultados) > 0, "Expected at least one match for '866381'"
        for item in resultados:
            assert "866381" in item.get("imei", "")
