"""Entrada de linha de comando para carregar um plano salvo no SQLite.""" from __future__ import annotations import argparse import json from pathlib import Path import sys CAMINHO_DO_CODIGO = Path(__file__).resolve().parent.parent if str(CAMINHO_DO_CODIGO) not in sys.path: sys.path.insert(0, str(CAMINHO_DO_CODIGO)) from engine.persistencia.conexao import abrir_banco from engine.persistencia.repositorio_de_planos import RepositorioDePlanos def carregar( caminho_do_banco: Path, plano_id: int | None = None, video_id: str | None = None, ) -> dict[str, object] | None: """Carrega um plano existente, preferindo o mais recente do vídeo informado.""" conexao = abrir_banco(caminho_do_banco) try: if plano_id is None: if not video_id: raise ValueError("Informe plano_id ou video_id para carregar um plano.") linha = conexao.execute( """SELECT id FROM planos_de_edicao WHERE video_id = ? ORDER BY criado_em DESC, id DESC LIMIT 1""", (video_id,), ).fetchone() if linha is None: return None plano_id = int(linha["id"]) plano = RepositorioDePlanos(conexao).carregar_plano(plano_id) if plano is None: return None return { "plano_id": plano_id, "source": plano.origem, "actions": [ { "kind": acao.tipo, "start": acao.inicio, "end": acao.fim, "reason": acao.motivo or "Decisão registrada no plano editorial.", **acao.parametros, } for acao in plano.acoes ], "video_id": plano.video_id, "tipo_de_video": plano.tipo_de_video, "modelo_da_ia": plano.modelo_da_ia, "intencao": plano.intencao, } finally: conexao.close() def principal() -> None: """Executa o carregamento pela linha de comando.""" argumentos = argparse.ArgumentParser() argumentos.add_argument("--banco", type=Path, default=Path(".jhonny/analises.db")) argumentos.add_argument("--plano-id", type=int) argumentos.add_argument("--video-id") opcoes = argumentos.parse_args() try: plano = carregar(opcoes.banco, opcoes.plano_id, opcoes.video_id) if plano is None: raise ValueError("Nenhum plano de edição encontrado.") print(json.dumps({"ok": True, "plano": plano}, ensure_ascii=False)) except (OSError, ValueError) as erro: print(json.dumps({"ok": False, "erro": str(erro)}, ensure_ascii=False)) raise SystemExit(1) from erro if __name__ == "__main__": principal()