# -*- coding: utf-8 -*-
"""
Agile Together — revisar o Product Backlog com a sua IA.

O Product Backlog e' vivo: ele muda quando voce aprende algo. Este passo entrega
a sua IA a lista REAL do seu quadro e pede duas coisas — reescrever o que ficou
vago e propor o que falta. A resposta volta pelo cartao "0. Caixa de entrada".

Nada e' apagado aqui: itens sao renomeados ou criados, nunca removidos.
"""
import caixa
import entradas
import prompts
from agile_together import cfg, get_cards, create_card, update_card
from runner import header, step, ok, warn, done
from idioma import T, Tf

c = cfg()
objetivo = (c.get('OBJETIVO') or '').strip()
backlog = get_cards('product_backlog')
titulos = [(b.get('titulo', '') or '') for b in backlog
           if not (b.get('titulo', '') or '').upper().startswith('META DO PRODUTO')]
if not titulos:
    raise SystemExit(T("O Product Backlog esta vazio — rode o criar_backlog.py antes."))

secoes = caixa.ler(
    ["RENOMEAR", "ADICIONAR"],
    T("Revisao do Product Backlog"),
    prompts.atualizar_backlog(objetivo, titulos),
    obrigatorias=[],          # os dois blocos podem vir vazios: revisar e' opcional
)
renomear = entradas.itens(caixa.secao(secoes, "RENOMEAR"))
adicionar = entradas.itens(caixa.secao(secoes, "ADICIONAR"))
if not renomear and not adicionar:
    raise SystemExit(T("A resposta nao trouxe nada em RENOMEAR nem em ADICIONAR — "
                     "pelo visto o backlog esta bom como esta'."))

header(T("Revisao do Product Backlog"))


def _descricao(item):
    prio = item.get("prioridade", "Media")
    pts = item.get("pontos", "0")
    return f"Prioridade: {prio} | Story Points: {pts}"


step(f"Renomear ({len(renomear)})")
for item in renomear:
    trecho = (item.get("_") or "").strip()
    novo = (item.get("novo") or "").strip()
    if not trecho or not novo:
        continue
    achado = next((b for b in backlog
                   if trecho.lower() in (b.get('titulo', '') or '').lower()), None)
    if not achado:
        warn(Tf("nao encontrei item com o trecho: {0}", trecho[:58]))
        continue
    antigo = (achado.get('titulo', '') or '')[:46]
    update_card(achado['id'], titulo=novo, descricao=_descricao(item))
    ok(f"{antigo} -> {novo[:46]}")

step(Tf("Adicionar ({0})", len(adicionar)))
for item in adicionar:
    titulo = (item.get("_") or "").strip()
    if not titulo:
        continue
    create_card('product_backlog', titulo, _descricao(item))
    ok(titulo[:66])

caixa.consumir(log=step)
done(T("Product Backlog revisado. Ordene-o contra a Meta do Produto: "
     "o topo e' o que entra na proxima Sprint."))
