# -*- coding: utf-8 -*-
"""
Agile Together — Daily Scrum.

A Daily inspeciona o progresso rumo a Meta da Sprint e replaneja o dia. Aqui ela
vira tres coisas no seu quadro: o foco de hoje (itens movidos para a lista Daily
Scrum), as tarefas novas que o dia pediu, e o slot do Daily marcado como
concluido — com a data real.

Voce nao edita arquivo nenhum: o passo entrega o prompt, voce cola a resposta da
sua IA no cartao "0. Caixa de entrada" e roda de novo. Pode rodar em qualquer dia
util: o passo conclui o proximo Daily em aberto da Sprint, nao um dia fixo.
"""
import datetime

import caixa
import entradas
import prompts
from agile_together import (cfg, get_cards, create_card, move_card,
                            register_next_daily)
from runner import header, step, ok, warn, done
from idioma import T, Tf

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

sb = get_cards('sprint_backlog')
em_andamento = [(x.get('titulo', '') or '') for x in sb
                if not (x.get('titulo', '') or '').upper().startswith('META DA SPRINT')]
meta_sprint = next((t.split(':', 1)[1].strip() for t in
                    [(x.get('titulo', '') or '') for x in sb]
                    if t.upper().startswith('META DA SPRINT')), "")
concluidos = [(x.get('titulo', '') or '') for x in get_cards('concluido')][-10:]

if not em_andamento:
    raise SystemExit(T("O Sprint Backlog esta vazio — rode o sprint_planning.py antes."))

secoes = caixa.ler(
    ["FOCO DE HOJE", "NOVAS TAREFAS", "IMPEDIMENTO"],
    Tf("Daily Scrum — Sprint {0}", sprint),
    prompts.daily(sprint, meta_sprint, em_andamento, concluidos),
    obrigatorias=["FOCO DE HOJE"],
)

foco = [i["_"] for i in entradas.itens(caixa.secao(secoes, "FOCO DE HOJE")) if i.get("_")]
novas = entradas.itens(caixa.secao(secoes, "NOVAS TAREFAS"))
impedimento = caixa.secao(secoes, "IMPEDIMENTO")

header(Tf("Daily Scrum — Sprint {0}", sprint))

# 1) Sobras de ontem: o que ficou na lista Daily Scrum e nao foi concluido.
sobras = get_cards('daily_scrum')
if sobras:
    step(Tf("{0} item(ns) de ontem ainda no Daily Scrum:", len(sobras)))
    for card in sobras:
        print(f"     - {card.get('titulo', '')[:65]}")
    print(T("     Concluiu? Arraste para Concluido no ProjectAdm. "
          "Travou? Registre um impedimento (registrar_impedimento.py)."))

# 2) O foco de hoje sai do Sprint Backlog e entra na lista Daily Scrum.
movidos = 0
for trecho in foco:
    achado = next((card for card in sb
                   if trecho.strip().lower() in (card.get('titulo', '') or '').lower()), None)
    if achado:
        move_card(achado['id'], 'daily_scrum')
        ok(Tf("foco de hoje  {0}", achado['titulo'][:58]))
        movidos += 1
    else:
        warn(Tf("nao encontrei no Sprint Backlog: {0}", trecho[:58]))

# 3) Tarefas que o dia pediu.
for item in novas:
    titulo = (item.get("_") or "").strip()
    if not titulo:
        continue
    # O prefixo [IA] e o que o KR4 (alavancagem de IA) conta. Quem marca e o
    # curso, aqui: esta tarefa nasceu de uma proposta da sua IA na Daily.
    if not titulo.upper().startswith("[IA]"):
        titulo = f"[IA] {titulo}"
    create_card('daily_scrum', titulo, item.get("detalhe", ""))
    ok(f"tarefa nova   {titulo[:58]}")

# 4) Impedimento, se a IA apontou um (o cartao vive na lista de eventos).
if impedimento and impedimento.strip().lower() not in ("nenhum", "nenhuma", "-", "n/a"):
    create_card('eventos', Tf("IMPEDIMENTO (Sprint {0}): {1}", sprint, impedimento[:70]),
                Tf('Levantado na Daily de {0}.\n\n{1}', datetime.date.today().isoformat(), impedimento))
    warn(T("Impedimento registrado em Eventos Scrum — resolver e' prioridade do dia."))

# 5) O slot do Daily.
daily = register_next_daily(sprint, None)
if daily:
    step(f"{daily.get('titulo', '')[:60]} concluido.")
else:
    warn(Tf("Todos os Dailies desta Sprint ja' foram concluidos (cadencia = {0} por Sprint).", c.get('DAILIES_POR_SPRINT', 4)))

caixa.consumir(log=step)
done(Tf("{0} item(ns) no foco de hoje. Durante o dia, arraste para Concluido o que terminar.", movidos + len(novas)))
