"""
Project Together — powered by AI: a sua trilha no curso (lista "Concluido (curso)").

Cada passo concluido vira um cartao com a data na lista "Concluido (curso)" do seu
quadro. E a sua evidencia de progresso — e a base do seu certificado. Nao e o
"Entregue" do projeto (esse e o trabalho); e o "feito" do CURSO.

Idempotente: rodar o mesmo passo de novo atualiza o cartao, nao duplica.
"""
from datetime import date

from env import cfg, get_int
from pa_client import list_cards, create_card, update_card, find_list_id_by_name, list_lists
from idioma import T, Tf

LISTA = T("Concluído (curso)")

PASSOS = {
    0: T("Ambiente configurado (ProjectAdm + IA + scripts)"),
    1: T("Iniciar o projeto — termo de abertura (5W2H) e abordagem escolhida"),
    2: T("Revisar o escopo"),
    3: T("Analisar os riscos"),
    4: T("Cronograma e orçamento"),
    5: T("Revisar e aprovar o plano (baseline)"),
    6: T("Engajar as partes interessadas"),
    7: T("Orientar e executar"),
    8: T("Monitorar e Status Report"),
    9: T("Controlar mudanças"),
    10: T("Encerrar e verificar o valor entregue"),
}


def _nome(passo):
    """O nome do passo na trilha, JA na abordagem do aluno: quem faz Scrum registra
    "Passo 8 — Sprint Review", que e' o que ele de fato fez. O numero e o mesmo nas
    duas abordagens — e' ele que o feitos() le. Nunca levanta (a trilha nunca pode
    derrubar um passo)."""
    base = PASSOS.get(passo, "")
    try:
        from prompts import rotulo
        return rotulo(passo, base=base)
    except (Exception, SystemExit):
        return base


def _lista_id():
    lid = get_int(cfg(), "LIST_CONCLUIDO")
    if lid:
        return lid
    return find_list_id_by_name(LISTA, list_lists()) or find_list_id_by_name(
        "Concluido (curso)", list_lists())


def registrar(passo, detalhe=""):
    """Registra (ou atualiza) o passo concluido. Nunca interrompe o script."""
    try:
        lid = _lista_id()
        if not lid:
            return False
        titulo = f"Passo {passo} — {_nome(passo)}".rstrip(" —")
        desc = f"Concluído em {date.today().isoformat()}." + (f"\n{detalhe}" if detalhe else "")
        existente = next((c for c in list_cards(lid)
                          if (c.get("titulo") or "").startswith(f"Passo {passo} —")), None)
        if existente:
            update_card(existente["id"], descricao=desc, concluido=True)
        else:
            cid = create_card(lid, titulo, desc)
            update_card(cid, concluido=True)
        return True
    except Exception as e:
        print(Tf("  [aviso] não consegui registrar o passo {0} na trilha: {1}", passo, e))
        return False


def feitos():
    """Numeros dos passos ja registrados como concluidos."""
    try:
        lid = _lista_id()
        if not lid:
            return set()
        n = set()
        for c in list_cards(lid):
            t = (c.get("titulo") or "")
            if t.startswith("Passo "):
                try:
                    n.add(int(t.split()[1].rstrip("—").strip()))
                except (IndexError, ValueError):
                    pass
        return n
    except Exception:
        return set()
