"""
Catálogo de fenômenos detectados pelo ETL.

Fenômenos são flags de qualidade/alerta identificados durante a normalização.
Útil para exibir mensagens legíveis a advogados e gestores de LegalOps.
"""

# Descrições em português para cada código de fenômeno.
# Fenômenos dinâmicos (ex: "inversao_polo:CPF") usam prefixo para lookup.
DESCRICOES: dict[str, str] = {
    "cnj_invalido":               "Número CNJ fora do formato padrão (NNNNNNN-DD.AAAA.J.TT.OOOO)",
    "sem_fontes":                 "Nenhuma fonte judicial encontrada para este processo",
    "multiplas_instancias_ativas": "Processo ativo simultaneamente em mais de uma instância",
    "duplicata_ingestao":         "Fonte duplicada detectada na mesma instância",
    "redistribuicao":             "Redistribuição identificada entre fontes do mesmo grau",
    "crawl_duplicado":            "Coleta duplicada da mesma fonte (IDs distintos, mesmo tribunal/grau)",
    "recursos_distintos":         "Recursos distintos identificados no mesmo grau",
    "inversao_polo":              "Polo ativo e passivo invertidos entre graus do processo",
}


def descrever(fenomeno: str) -> str:
    """
    Retorna descrição legível de um fenômeno.
    Suporta fenômenos dinâmicos com sufixo (ex: 'inversao_polo:12345678900').

    Exemplo:
        descrever("cnj_invalido")           → "Número CNJ fora do formato..."
        descrever("inversao_polo:123.456")  → "Polo ativo e passivo invertidos..."
    """
    # Busca exata
    if fenomeno in DESCRICOES:
        return DESCRICOES[fenomeno]
    # Busca por prefixo (fenômenos dinâmicos com sufixo após ':')
    prefixo = fenomeno.split(":")[0]
    return DESCRICOES.get(prefixo, fenomeno)


def descrever_todos(fenomenos: list[str]) -> list[dict[str, str]]:
    """
    Retorna lista de dicts com código e descrição para cada fenômeno.

    Exemplo:
        descrever_todos(["cnj_invalido", "sem_fontes"])
        → [{"codigo": "cnj_invalido", "descricao": "Número CNJ fora..."},
           {"codigo": "sem_fontes",   "descricao": "Nenhuma fonte..."}]
    """
    return [{"codigo": f, "descricao": descrever(f)} for f in fenomenos]
