# -*- coding: utf-8 -*-
"""
Agile Together — decompor um item em tarefas (checklist no cartao).

Voce escolhe o item por NUMERO, numa lista que o proprio passo mostra — nao
precisa procurar id de cartao em URL nenhuma. Depois o passo entrega o prompt
com o titulo do item dentro; a resposta da IA volta pelo cartao "0. Caixa de
entrada" e vira a checklist "Decomposicao em Tasks".

Rodar de novo no mesmo item nao duplica: a checklist e' reaproveitada e so'
entram as tarefas que ainda nao estavam la'.
"""
import caixa
import entradas
import prompts
from agile_together import (get_cards, find_card, get_checklists,
                            create_checklist, add_checklist_item)
from runner import header, step, ok, warn, done
from idioma import T, Tf

CHECKLIST_TITULO = "Decomposicao em Tasks"
_ARQUIVO_ESCOLHA = ".item_em_refinamento"

# ── 1. Qual item? ────────────────────────────────────────────────────────────
# A escolha fica guardada entre as duas rodadas do passo (a de entregar o prompt
# e a de ler a resposta), senao o aluno teria de escolher duas vezes o mesmo item.
import os
_AQUI = os.path.dirname(os.path.abspath(__file__))
_MEM = os.path.join(_AQUI, _ARQUIVO_ESCOLHA)


def _lembrado():
    try:
        with open(_MEM, encoding="utf-8") as f:
            return int(f.read().strip())
    except Exception:
        return 0


def _lembrar(cid):
    with open(_MEM, "w", encoding="utf-8") as f:
        f.write(str(cid))


cid = _lembrado()
card = None
if cid:
    card, _ = find_card(cid)

if not card:
    itens = [c for c in (get_cards('sprint_backlog') or []) + (get_cards('product_backlog') or [])
             if not (c.get('titulo', '') or '').upper().startswith(('META DA SPRINT', 'META DO PRODUTO'))]
    if not itens:
        raise SystemExit(T("Nao ha' item para refinar — rode o criar_backlog.py antes."))
    header(T("Qual item voce quer decompor em tarefas?"))
    for n, c in enumerate(itens, 1):
        print(f"  {n:>2}. {c.get('titulo', '')[:66]}")
    escolha = input(T("\n  Numero do item (Enter cancela): ")).strip()
    if not escolha.isdigit() or not (1 <= int(escolha) <= len(itens)):
        raise SystemExit(T("Nada escolhido — nada foi alterado."))
    card = itens[int(escolha) - 1]
    _lembrar(card['id'])

titulo = card.get('titulo', '')
step(f"Item: {titulo[:66]}")

# ── 2. As tarefas, pela Caixa de entrada ─────────────────────────────────────
secoes = caixa.ler(
    ["TAREFAS"],
    f"Decompor em tarefas: {titulo[:50]}",
    prompts.tarefas(titulo, card.get('descricao', '') or ''),
)
tarefas = [i["_"] for i in entradas.itens(caixa.secao(secoes, "TAREFAS")) if i.get("_")]
if not tarefas:
    raise SystemExit(T("A secao TAREFAS veio vazia. Peca a lista de novo a sua IA."))

# ── 3. A checklist no cartao ─────────────────────────────────────────────────
checklists = get_checklists(card['id'])
alvo = next((ck for ck in checklists
             if (ck.get('titulo') or '').strip().lower() == CHECKLIST_TITULO.lower()), None)
if not alvo:
    alvo = create_checklist(card['id'], CHECKLIST_TITULO)
    step(Tf('Checklist "{0}" criada no cartao.', CHECKLIST_TITULO))

ja_tem = {(i.get('titulo') or '').strip().lower() for i in (alvo.get('itens') or [])}
novas = 0
for t in tarefas:
    if t.strip().lower() in ja_tem:
        continue
    add_checklist_item(alvo['id'], t)
    ok(t[:66])
    novas += 1
if not novas:
    warn(T("Todas as tarefas propostas ja' estavam na checklist."))

caixa.consumir(log=step)
try:
    os.remove(_MEM)
except OSError:
    pass
done(Tf("{0} tarefa(s) adicionada(s) ao item. Uma tarefa que nao cabe num dia ainda esta "
        "grande demais.", novas))
