import json
from pyjuris.bruto_to_csv import load_json, sanitize_str, sanitize_value

def test_load_objeto_unico(tmp_path):
    f = tmp_path / "t.json"
    f.write_text('{"numero_cnj": "001"}', encoding="utf-8")
    result = load_json(str(f))
    assert result["numero_cnj"] == "001"

def test_load_lista_com_um_item(tmp_path):
    f = tmp_path / "t.json"
    f.write_text('[{"numero_cnj": "001"}]', encoding="utf-8")
    result = load_json(str(f))
    assert result["numero_cnj"] == "001"


def test_fix_double_encode():
    # "Relação" com double-encode latin-1
    broken = "RelaÃ§Ã£o"
    assert sanitize_str(broken) == "Relação"

def test_remove_quebra_de_linha():
    assert sanitize_str("foo\nbar") == "foo bar"

def test_remove_tab():
    assert sanitize_str("foo\tbar") == "foo bar"

def test_normaliza_espacos_multiplos():
    assert sanitize_str("foo   bar") == "foo bar"

def test_none_vira_vazio():
    assert sanitize_str(None) == ""

def test_false_vira_nao():
    assert sanitize_value(False) == "Não"

def test_true_vira_sim():
    assert sanitize_value(True) == "Sim"

from pyjuris.bruto_to_csv import flatten_record

def test_flatten_campos_raiz():
    record = {
        "numero_cnj": "0000894-42.2025.5.13.0024",
        "ano_inicio": 2025,
        "titulo_polo_ativo": "Pedro",
        "fontes": [],
        "estado_origem": {"nome": "Paraíba", "sigla": "PB"},
        "unidade_origem": {"nome": "5ª VARA", "cidade": "Campina Grande", "estado": {"nome": "Paraíba", "sigla": "PB"}, "tribunal_sigla": "TRT-13"},
        "processos_relacionados": [],
        "fontes_tribunais_estao_arquivadas": False,
    }
    flat = flatten_record(record)
    assert flat["numero_cnj"] == "0000894-42.2025.5.13.0024"
    assert flat["ano_inicio"] == "2025"
    assert flat["estado_origem_nome"] == "Paraíba"
    assert flat["estado_origem_sigla"] == "PB"
    assert flat["unidade_origem_nome"] == "5ª VARA"
    assert flat["unidade_origem_cidade"] == "Campina Grande"
    assert flat["unidade_origem_tribunal_sigla"] == "TRT-13"
    assert flat["fontes_tribunais_estao_arquivadas"] == "Não"

def test_flatten_sem_fontes_nao_quebra():
    record = {"numero_cnj": "001", "fontes": [], "estado_origem": {}, "unidade_origem": {}}
    flat = flatten_record(record)
    assert flat["numero_cnj"] == "001"

from pyjuris.bruto_to_csv import deduplicate, build_labels

def test_deduplicate_remove_duplicado():
    records = [
        {"numero_cnj": "001", "titulo_polo_ativo": "Pedro"},
        {"numero_cnj": "001", "titulo_polo_ativo": "João"},
        {"numero_cnj": "002", "titulo_polo_ativo": "Maria"},
    ]
    result = deduplicate(records)
    assert len(result) == 2
    assert result[0]["titulo_polo_ativo"] == "Pedro"

def test_deduplicate_sem_duplicados():
    records = [{"numero_cnj": "001"}, {"numero_cnj": "002"}]
    assert len(deduplicate(records)) == 2

def test_build_labels_campos_conhecidos():
    flat = {"numero_cnj": "001", "ano_inicio": "2025", "assunto_1": "X", "envolvido_1_nome": "Y"}
    labels = build_labels(flat)
    assert labels["numero_cnj"] == "Número CNJ"
    assert labels["ano_inicio"] == "Ano de Início"
    assert labels["assunto_1"] == "Assunto 1"
    assert labels["envolvido_1_nome"] == "Parte 1 Nome"

import csv as csv_module
from pyjuris.bruto_to_csv import write_csv

def test_write_csv_gera_cabecalho_e_linha(tmp_path):
    records = [{"numero_cnj": "001", "titulo_polo_ativo": "Pedro"}]
    labels = {"numero_cnj": "Número CNJ", "titulo_polo_ativo": "Polo Ativo"}
    out = tmp_path / "out.csv"
    write_csv(records, labels, str(out))
    with open(str(out), encoding="utf-8-sig") as f:
        reader = csv_module.DictReader(f)
        rows = list(reader)
    assert rows[0]["Número CNJ"] == "001"
    assert rows[0]["Polo Ativo"] == "Pedro"

def test_write_csv_encoding_utf8_bom(tmp_path):
    records = [{"campo": "Relação de Emprego"}]
    labels = {"campo": "Campo"}
    out = tmp_path / "out.csv"
    write_csv(records, labels, str(out))
    raw = open(str(out), "rb").read(3)
    assert raw == b"\xef\xbb\xbf"  # BOM UTF-8
