"""Pruebas de la siembra idempotente de catálogos globales del CRM."""

from api.v1.modules.crm.catalogs.models import CatalogItem
from api.v1.modules.crm.catalogs.seed import seed_global_catalogs

# Catálogos nuevos del proceso comercial y una clave base que debe existir en cada uno.
NEW_CATALOGS = {
    "tipo_operacion": "importacion",
    "medio_transporte": "maritimo",
    "tipo_servicio": "puerto_puerto",
    "prioridad": "urgente",
    "tipo_mercancia": "peligrosa",
    "unidad_medida": "kg",
    "tipo_embalaje": "pallet",
    "servicio_adicional": "seguro",
    "tipo_documento": "factura_comercial",
}


def _codes(db, catalog: str) -> set[str]:
    return {
        row.code
        for row in db.query(CatalogItem.code).filter(
            CatalogItem.catalog == catalog, CatalogItem.tenant_id.is_(None)
        )
    }


def test_seed_creates_new_catalogs(db):
    seed_global_catalogs(db)
    for catalog, base_code in NEW_CATALOGS.items():
        codes = _codes(db, catalog)
        assert codes, f"El catálogo {catalog} quedó vacío"
        assert base_code in codes, f"Falta la clave base {base_code} en {catalog}"


def test_seed_is_idempotent(db):
    first = seed_global_catalogs(db)
    assert first, "La primera corrida debió sembrar filas"
    second = seed_global_catalogs(db)
    assert second == {}, "La segunda corrida no debe agregar filas nuevas"


def test_pais_catalog_populated(db):
    """El catálogo pais alimenta Origen/Destino de la solicitud (decisión 6)."""
    seed_global_catalogs(db)
    codes = _codes(db, "pais")
    assert len(codes) > 100
    assert "MEX" in codes
