"""
Project Together — powered by AI: PASSO 3 — Analisar os riscos.

Risco nao e 'atraso' (isso e impacto): risco e uma CAUSA que leva a um EVENTO que
gera um IMPACTO. E nao e so o que pode dar errado (ameaca) — e tambem o que pode dar
MUITO certo (oportunidade). Nas duas abordagens o risco mora na lista "Riscos e
Premissas"; no agil, a resposta a uma incerteza de CONHECIMENTO vira um SPIKE (um
item de investigacao com tempo fixo) que sobe no backlog — aprender cedo o que mata
o projeto.

O RITMO (modo CHAT): o prompt do Passo 3 ja foi para a sua area de transferencia no
fim do Passo 2. Cole na IA -> cole a resposta (comeca com [P3]) no cartao
"0. Caixa de entrada" -> rode este passo. Voce nao edita arquivo nenhum.
"""
import entradas
import passos
import quadro
import team_check
from runner import ok, step, warn
from idioma import T, Tf

N = 3
c, ids, abordagem = passos.abrir(N)
bloco = passos.ler_bloco(ids, N, T("nenhum risco analisado"))

# Cada ponto de atenção = um cartão na lista Riscos e Premissas. Há QUATRO tipos:
#  · RISCO (ameaça/oportunidade) e PROBLEMA (já aconteceu) -> avaliados por
#    PROBABILIDADE × IMPACTO (PMBOK 8); o PRODUTO é a PRIORIDADE (cor do cartão,
#    ordena o tratamento). Levam resposta e dono.
#  · PREMISSA (assumo verdadeiro sem prova) e RESTRIÇÃO (limite imposto de fora) NÃO
#    têm probabilidade/impacto nem ação — só entram no registro tipadas, para não
#    virarem surpresa. A premissa carrega um DONO (quem a confirma).
# O gerador do 'Registro dos pontos de atenção.xlsx' lê estes mesmos cartões de volta
# (quadro.riscos_do_quadro), então a marca da 1ª linha (🔴/🟢/🔵/🟠) é o que diz o tipo.
# A leitura do bloco e a montagem dos cartões moram em passos.py (pontos_de_atencao +
# cartoes_de_riscos): o Passo 9 detalha os riscos de uma MUDANÇA no mesmo formato, e um
# formato só pode ter um leitor — senão os dois divergem no primeiro ajuste.
pontos = passos.pontos_de_atencao(bloco)

if not pontos:
    raise SystemExit(T("Não consegui ler nenhum ponto de atenção no bloco [P3]. Confira se a "
                     "resposta da IA veio no formato pedido (seções RISCOS/PREMISSAS/"
                     "RESTRIÇÕES, cada item num •) e cole de novo."))

# O DONO da resposta a um risco é trabalho como qualquer outro: sai da mesma lista
# fechada. Conferido ANTES de virar cartão — ver team_check.
team_check.conferir(pontos, ids, campo="dono", o_que=T("ponto(s) de atenção"))

cartoes, _contagem = passos.cartoes_de_riscos(pontos)
ameacas = _contagem["ameaca"]
oportunidades = _contagem["oportunidade"]
premissas = _contagem["premissa"]
restricoes = _contagem["restricao"]

n = passos.escrever_cartoes(ids, "RISCOS", cartoes, log=step)
# A máquina calcula a PRIORIDADE para você: se um risco tem Probabilidade e Impacto mas a
# Prioridade ficou sem calcular (ex.: você editou o cartão à mão na revisão), o python
# recalcula (Prob × Impacto) e atualiza o cartão. Nunca derruba o passo.
try:
    rp = quadro.reparar_prioridades_dos_riscos(ids, log=step)
    if rp:
        ok(Tf("Prioridade recalculada em {0} risco(s) (Probabilidade × Impacto).", rp))
except Exception as e:
    warn(Tf("não consegui recalcular as prioridades agora: {0}", e))

# A UX de correção: Probabilidade/Impacto/Dono viram DROPDOWNS no cartão e a Prioridade se
# calcula sozinha. Aditivo e defensivo — se o servidor não expõe campos, segue no modo texto.
try:
    import campos
    cps, _s, _a = campos.sincronizar(ids, log=step)
    if cps:
        ok(T("Campos de risco no quadro — corrija pelos menus (dropdowns) do cartão: "
           "Probabilidade, Impacto e Dono; a Prioridade se calcula sozinha."))
        # O aluno precisa saber o que fecha o ciclo. Sem esta frase ele escolhia no menu
        # e o curso seguia cobrando o mesmo risco, porque a auditoria lê o TEXTO e a
        # ponte campo → texto não roda sozinha entre um passo e outro (Eduardo, 27/07).
        step(T("Depois de escolher nos menus, rode a tecla P (Verificar o meu PROJETO) — "
             "é ela que traz as suas escolhas para o plano e refaz as conferências."))
except Exception as e:
    warn(Tf("não consegui configurar os campos de risco agora: {0}", e))
extras = []
if premissas:
    extras.append(Tf("{0} premissa(s)", premissas))
if restricoes:
    extras.append(Tf("{0} restrição(ões)", restricoes))
ok(Tf("{0} ponto(s) de atenção na lista Riscos e Premissas: {1} ameaça(s), "
      "{2} oportunidade(s){3}.", n, ameacas, oportunidades,
      (", " + ", ".join(extras)) if extras else ""))
if not oportunidades:
    step(T("Dica: todo projeto tem oportunidade também. Vale um segundo olhar — "
         "o que, se desse muito certo, aceleraria o seu OKR?"))

_res = (Tf("{0} ameaça, {1} oportunidade", ameacas, oportunidades)
        + (", " + ", ".join(extras) if extras else ""))
passos.finalizar(
    N, ids,
    resumo=Tf("{0} ponto(s) de atenção analisado(s) ({1}).", n, _res),
    mensagem_conclusao=T("Passo 3 concluído — os seus pontos de atenção estão no quadro: "
                       "riscos priorizados por probabilidade × impacto, premissas e "
                       "restrições registradas."))

# O grande valor: o quadro JA e' o seu registro de riscos. Entao geramos o
# 'Registro dos pontos de atencao.xlsx' (no visual do template do curso) lendo o
# quadro — voce nao copia nada. Subproduto de concluir o passo (como o Termo de
# Abertura no Passo 1); nunca derruba o passo. Regenere pela tecla D do menu.
try:
    import os as _os
    import artefatos
    saida, _av = artefatos.gerar_registro_pontos_de_atencao(ids, abordagem=abordagem)
    for cam in ([saida] if isinstance(saida, str) else (saida or [])):
        print(Tf("  📄 Registro dos pontos de atenção: _saida/documentos/{0}", _os.path.basename(cam)))
    if saida:
        print(T("     (Excel com a coluna Prioridade = Probabilidade × Impacto calculada"))
        print(T("      automaticamente — pronto para compartilhar; regenere pela tecla D do menu.)"))
        # ONDE O ALUNO ESTÁ QUANDO ISTO IMPORTA: ele acabou de receber a planilha. Dizer
        # aqui que ela VOLTA é o que transforma a tecla I num hábito — dito só no menu,
        # ela seria mais uma letra numa lista de dez.
        print(T("     Já vem ordenado por prioridade e com o filtro ligado. Ajustou os riscos"))
        print(T("     no Excel? A tecla I do menu traz cada linha de volta para o seu quadro."))
except Exception as e:
    warn(Tf("não consegui gerar o Registro dos pontos de atenção agora ({0}); gere pela tecla "
            "D do menu quando quiser.", e))
