"""
Tipos do ETL — TypedDicts para canonical e outputs.

Uso:
    from pyjuris.types import ProcessoCanonical, ProcessoLopsAPI
"""

from typing import TypedDict


class Tribunal(TypedDict, total=False):
    sigla: str | None
    nome: str | None
    sistema: str | None


class Assunto(TypedDict, total=False):
    id: int | None
    nome: str | None
    path: str | None


class Parte(TypedDict, total=False):
    nome: str | None
    polo: str          # "ATIVO" | "PASSIVO" | "ADVOGADO" | "DESCONHECIDO"
    tipo: str | None
    tipo_pessoa: str | None
    documento: str | None
    advogados: list


class Instancia(TypedDict, total=False):
    fonte_id: int | None
    grau: int
    grau_formatado: str
    tipo: str          # "ACAO_ORIGINAL" | "RECURSO" | "CUMPRIMENTO_SENTENCA" | ...
    tribunal: Tribunal
    classe: str | None
    classe_raw: str | None
    assunto_principal: str | None
    assunto_path: str | None
    assuntos: list[Assunto]
    orgao_julgador: str | None
    valor_causa: float | None
    moeda: str | None
    data_inicio: str | None
    data_ultima_movimentacao: str | None
    status: str        # "ATIVO" | "INATIVO"
    arquivado: bool | None
    capa_disponivel: bool
    partes: list[Parte]
    audiencias: list
    movimentos: list  # reservado — sempre [] por enquanto


class ETLMetadata(TypedDict):
    processado_em: str
    versao_etl: str
    fonte_origem: str


class ProcessoCanonical(TypedDict, total=False):
    """Formato interno do ETL — agnóstico de output_template."""
    _fonte_origem: str
    numero_cnj: str
    tipo_principal: str   # "ACAO_ORIGINAL" | "RECURSO" | "CUMPRIMENTO_SENTENCA" | ...
    fase_atual: str        # "PRIMEIRO_GRAU" | "SEGUNDO_GRAU" | "TERCEIRO_GRAU" | "ENCERRADO"
    status_geral: str      # "ATIVO" | "INATIVO"
    total_instancias: int
    segredo_justica: bool
    capa_disponivel: bool
    tem_audiencia: bool
    tem_multiplas_instancias_ativas: bool
    fenomenos_detectados: list[str]
    ano_inicio: int | None
    data_inicio: str | None
    data_ultima_movimentacao: str | None
    data_ultima_verificacao: str | None
    polo_ativo: str | None
    polo_passivo: str | None
    instancias: list[Instancia]


class ProcessoLopsAPI(ProcessoCanonical, total=False):
    """Output do template lops_api — canonical + metadados de schema."""
    schema_version: str
    _etl: ETLMetadata
