# -*- coding: utf-8 -*-
"""
Agile Together — Sprint Retrospective.

A Retrospectiva olha para o PROCESSO (pessoas, interacoes, ferramentas,
Definicao de Pronto), nao para o produto — e termina em acoes que cabem num
cartao. E' ela que fecha a Sprint: ao final, o contador SPRINT_ATUAL avanca.

As acoes acordadas viram CARTOES no Product Backlog. Retrospectiva cuja acao nao
vira trabalho visivel e' conversa: no Guia do Scrum, as melhorias identificadas
entram no backlog da proxima Sprint.
"""
import caixa
import entradas
import prompts
from agile_together import (cfg, save_cfg, create_card, register_event)
from runner import header, step, ok, done
from idioma import T, Tf

c = cfg()
sprint = c.get('SPRINT_ATUAL', 1)
total = c.get('TOTAL_SPRINTS', 3)

# O relatorio dos KRs entra no prompt quando ja' houver como calcula-lo: a
# Retrospectiva fica muito melhor com o numero da Sprint na frente.
krs_texto = ""
try:
    from agile_together import compute_krs
    krs = compute_krs(sprint)
    if isinstance(krs, dict):
        krs_texto = "\n".join(f"  - {k}: {v}" for k, v in krs.items())
except Exception:
    krs_texto = ""

secoes = caixa.ler(
    ["DEU CERTO", "PROBLEMAS", "ACOES"],
    f"Sprint Retrospective — Sprint {sprint} de {total}",
    prompts.retro(sprint, krs_texto),
    obrigatorias=["ACOES"],
)
deu_certo = caixa.secao(secoes, "DEU CERTO")
problemas = caixa.secao(secoes, "PROBLEMAS")
acoes = [i["_"] for i in entradas.itens(caixa.secao(secoes, "ACOES")) if i.get("_")]
if not acoes:
    raise SystemExit(T("A secao ACOES veio vazia — a Retrospectiva precisa de pelo "
                     "menos uma acao concreta para a proxima Sprint."))

header(Tf("Sprint Retrospective — Sprint {0} de {1}", sprint, total))

descricao = (f"Sprint {sprint}\n\nO QUE DEU CERTO:\n{deu_certo}\n\n"
             f"PROBLEMAS:\n{problemas}\n\nACOES PARA A PROXIMA SPRINT:\n"
             + "\n".join(f"  - {a}" for a in acoes))
create_card('eventos', Tf("RETROSPECTIVE Sprint {0}", sprint), descricao)
ok(Tf("Retrospectiva registrada com {0} acao(oes)", len(acoes)))

# As acoes viram trabalho no Product Backlog — melhoria que nao vira cartao
# nao acontece.
for a in acoes[:3]:
    create_card('product_backlog', f"[Melhoria] {a}",
                Tf("Acao acordada na Retrospectiva da Sprint {0}.", sprint))
    ok(Tf("no backlog  [Melhoria] {0}", a[:56]))

register_event("Retrospectiva")

if sprint < total:
    save_cfg({'SPRINT_ATUAL': sprint + 1})
    step(Tf("SPRINT_ATUAL: {0} -> {1}", sprint, sprint + 1))
    proximo = f"A Sprint {sprint + 1} comeca quando voce rodar o sprint_planning.py."
else:
    step(Tf("Esta foi a ultima Sprint do curso (de {0}).", total))
    proximo = "Proximo passo: a apresentacao final (apresentacao_final.py)."

caixa.consumir(log=step)
done(Tf("Sprint {0} fechada. {1}", sprint, proximo))
