"""
Diagnostico da lista Referencia.

Rode pelo menu — NAO modifica nada. Apenas lista o que esta no board AGORA
e compara com o que referencia_cards.py espera ter la.

Util quando:
  - Os cards no board parecem ter conteudo antigo apos rodar configurar_board.py
  - Voce suspeita de cards duplicados (mesmo numero, titulo levemente diferente)
  - Quer verificar se algum card teve descricao alterada manualmente
"""
import sys, io
from idioma import T, Tf
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

import caixa
from agile_together import cfg, get_cards, delete_card
from referencia_cards import CARDS as REFERENCIA_CARDS

# ── Opcao de limpeza ────────────────────────────────────────────────────────
# Por padrao (False) o script SO diagnostica, nao apaga nada.
# Mude para True e rode de novo para APAGAR os cards orfaos
# (cards na Referencia que NAO estao em referencia_cards.py — geralmente
# duplicatas com titulo antigo). Nada alem dos orfaos e tocado.
APAGAR_ORFAOS = False

c = cfg()
referencia_id = c.get('LIST_REFERENCIA', 0)
if not referencia_id:
    raise SystemExit(T("ERRO: LIST_REFERENCIA nao configurado no .env. Rode configurar_board.py primeiro."))

print(Tf("Lista Referencia ID = {0}", referencia_id))
print("=" * 70)

cards_no_board = get_cards('referencia')
# A Caixa de entrada mora nesta lista desde 31/08/2026 (o primeiro cartao), e ela NAO
# esta' em referencia_cards.py — a descricao dela e' o que o ALUNO cola. Sem tira-la
# daqui, ela apareceria como "orfa" e o APAGAR_ORFAOS levaria junto a resposta da IA
# que estivesse colada nela. E' a mesma excecao que o configurar_board.py faz.
cards_no_board = [c for c in cards_no_board if not caixa._e_a_caixa(c)]
titulos_no_board = {c.get('titulo', '') for c in cards_no_board}
titulos_no_codigo = {t for t, _ in REFERENCIA_CARDS}

print(Tf('\n[Board]  {0} cards na lista Referencia', len(cards_no_board)))
print(Tf("[Codigo] {0} cards esperados em referencia_cards.py", len(REFERENCIA_CARDS)))

print(T("\n--- Diagnostico card a card ---\n"))
for titulo, descricao_esperada in REFERENCIA_CARDS:
    card_no_board = next((c for c in cards_no_board if c.get('titulo', '') == titulo), None)
    if card_no_board is None:
        print(f"  [FALTANDO]  {titulo[:65]}")
        print(Tf("              → configurar_board.py vai CRIAR este card"))
    else:
        desc_board = card_no_board.get('descricao', '') or ''
        if desc_board.strip() == descricao_esperada.strip():
            print(f"  [OK]        {titulo[:65]}")
        else:
            print(f"  [DESATUAL]  {titulo[:65]}")
            print(Tf("              → board tem {0} chars; codigo tem {1} chars", len(desc_board), len(descricao_esperada)))
            print(Tf("              → configurar_board.py vai ATUALIZAR este card"))

# Detecta cards no board que NAO estao no codigo (orfaos / duplicatas)
orfaos = titulos_no_board - titulos_no_codigo
if orfaos:
    print(Tf('\n--- {0} card(s) orfao(s) no board (NAO em referencia_cards.py) ---', len(orfaos)))
    orfaos_cards = [c for c in cards_no_board
                    if c.get('titulo', '') in orfaos]
    for c in orfaos_cards:
        print(Tf("  [ORFAO]     id={0}  {1}", c.get('id'), c.get('titulo', '')[:55]))
    if APAGAR_ORFAOS:
        print(T("\n  APAGAR_ORFAOS=True -> apagando..."))
        apagados = sum(1 for c in orfaos_cards if delete_card(c.get('id')))
        print(Tf("  {0}/{1} orfao(s) apagado(s).", apagados, len(orfaos_cards)))
    else:
        print(T("\n  Estes podem ser DUPLICATAS com titulo antigo."))
        print(T("  Para APAGA-los: mude APAGAR_ORFAOS=True no topo e rode de novo,"))
        print(T("  OU rode configurar_board.py (que tambem remove orfaos)."))
else:
    print(T("\n  Nenhum card orfao — Referencia esta limpa."))

print("\n" + "=" * 70)
if APAGAR_ORFAOS and orfaos:
    print(T("Diagnostico + limpeza concluidos."))
else:
    print(T("Diagnostico concluido. Nada foi modificado."))
print(T("Para sincronizar conteudo (criar/atualizar): rode configurar_board.py"))
