#!/usr/bin/env python3
"""
Pull IBKR account + historical bars and emit live fund signals (tactical, sector, VRP).

Output: ``RenTech/data/logs/live_fund_signals.json``

Then rebuild the command center with live signals merged::

    cd /Users/robzingale/trading_bot
    PYTHONUNBUFFERED=1 .venv/bin/python -m RenTech.live.run_live_fund_signals
    PYTHONUNBUFFERED=1 .venv/bin/python -m RenTech.monitor.build_command_center_snapshot --ibkr --live-signals
"""

from __future__ import annotations

import argparse
import asyncio
import json
import sys
from pathlib import Path

_REPO = Path(__file__).resolve().parents[2]
if str(_REPO) not in sys.path:
    sys.path.insert(0, str(_REPO))

from RenTech.live.fund_signals import (  # noqa: E402
    DEFAULT_OUT,
    run_live_fund_signals_async,
    write_live_fund_signals,
)


def main() -> None:
    ap = argparse.ArgumentParser(description=__doc__.split("\n\n")[0])
    ap.add_argument(
        "--config",
        type=Path,
        default=_REPO / "RenTech/live/config/live_platform_default.json",
        help="IB broker settings (host/port/clientId)",
    )
    ap.add_argument("--out", type=Path, default=DEFAULT_OUT)
    ap.add_argument("--no-vrp", action="store_true", help="Skip VRP recommend cycle (faster)")
    args = ap.parse_args()

    payload = asyncio.run(
        run_live_fund_signals_async(config_path=args.config, run_vrp=not args.no_vrp)
    )
    out = write_live_fund_signals(args.out, payload)
    print(json.dumps({"ok": True, "out": str(out), "fund_nav_usd": payload.get("fund_nav_usd")}, indent=2))


if __name__ == "__main__":
    main()
