# -*- coding: utf-8 -*-
"""
Agile Together — refinamento do Product Backlog (prioridade, pontos, aceitacao).

Refinar e' o trabalho continuo de deixar os itens do topo prontos para entrar
numa Sprint: prioridade clara, tamanho estimado e criterios de aceitacao que
permitam dizer "isto esta pronto" sem discussao.

O passo entrega a sua IA a lista real do seu quadro; a resposta volta pelo
cartao "0. Caixa de entrada" e atualiza os cartoes existentes — nao cria itens.
"""
import caixa
import entradas
import prompts
from agile_together import cfg, get_cards, 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(
    ["REFINAMENTO"],
    "Refinamento do Product Backlog",
    prompts.refinar_backlog(objetivo, titulos),
)
itens = entradas.itens(caixa.secao(secoes, "REFINAMENTO"))
if not itens:
    raise SystemExit(T("A secao REFINAMENTO veio vazia. Peca de novo a sua IA."))

header(T("Refinamento do Product Backlog"))
tocados = 0
for item in itens:
    trecho = (item.get("_") or "").strip()
    achado = next((b for b in backlog
                   if trecho and trecho.lower() in (b.get('titulo', '') or '').lower()), None)
    if not achado:
        warn(Tf("nao encontrei item com o trecho: {0}", trecho[:58]))
        continue
    desc = (f"Prioridade: {item.get('prioridade', 'Media')} | "
            f"Story Points: {item.get('pontos', '0')}")
    aceit = item.get("aceitacao") or item.get("criterio de aceitacao")
    if aceit:
        linhas = [a.strip() for a in aceit.split(";") if a.strip()]
        desc += "\n\nCriterios de aceitacao:\n" + "\n".join(f"  - {a}" for a in linhas)
    update_card(achado['id'], descricao=desc)
    ok(f"{(achado.get('titulo') or '')[:58]}")
    tocados += 1

caixa.consumir(log=step)
done(Tf("{0} item(ns) refinado(s). Item sem criterio de aceitacao nao esta pronto para entrar "
        "numa Sprint.", tocados))
