"""CV6 bot condition / readiness snapshot (in-process, no live server)."""
import logging
logging.getLogger("sqlalchemy").setLevel(logging.WARNING)
import main
from app.database.session import engine as _e
_e.echo = False
from loguru import logger as _lg
_lg.remove()

from app.config.settings import settings
from app.autonomous.autonomous_engine import autonomous_engine as ENG
from app.risk_guard.risk_guard import risk_guard as RG
from app.state.trading_state_manager import trading_state_manager as TSM
from app.api.broker_api import manager as BM
from app.market.live_feed import live_feed as LF

TSM.bootstrap()

def line(k, v): print(f"  {k:<26} {v}")

print("=" * 72)
print("CV6 BOT CONDITION —", __import__("datetime").datetime.now().strftime("%Y-%m-%d %H:%M"))
print("=" * 72)

print("\n[ENGINE]")
alive = ENG._thread is not None and ENG._thread.is_alive()
line("state", ENG.state)
line("running (loop thread)", alive)
line("mode", ENG.config.mode)
line("scanner", "SmartScanner" if ENG.config.use_smart_scanner else "BasicScanner")
line("total capital", f"Rs.{ENG.config.total_capital:,.0f}")
line("scan interval", f"{ENG.config.scan_interval_seconds}s")
line("max open positions", ENG.config.max_open_positions)
line("max trades/day", ENG.config.max_trades_per_day)
line("trading window", f"{ENG.config.trading_start}–{ENG.config.trading_end} (MCX {getattr(ENG.config,'commodity_trading_end','23:00')})")
line("strategies enabled", ENG.config.strategies_enabled)
line("open positions (engine)", len(ENG.pool_manager.all_positions()))
line("cycles run", ENG.cycle_count)

print("\n[BROKERS]  (connection is established by the running server's startup, not this probe)")
line("Angel One creds set", bool(settings.ANGEL_API_KEY and settings.ANGEL_CLIENT_ID))
line("MStock creds set", bool(settings.MSTOCK_API_KEY and settings.MSTOCK_CLIENT_ID))
line("active broker (manager)", BM.broker_name)
line("manager.connected", BM.connected)
line("registered brokers", list(getattr(BM, "_extra_brokers", {}).keys()) or "none")

print("\n[LIVE FEED]")
line("connected", LF.is_connected())
line("supervisor should_run", getattr(LF, "_should_run", False))
line("subscribed tokens", len(getattr(LF, "_subscribed", [])))
line("cached ticks", len(getattr(LF, "_tick_cache", {})))

print("\n[RISK GUARD]")
st = RG.get_status()
line("kill switch", st.get("kill_switch"))
line("daily loss limit", f"Rs.{st['limits']['daily']:,.0f}")
line("weekly / monthly", f"Rs.{st['limits']['weekly']:,.0f} / Rs.{st['limits']['monthly']:,.0f}")
line("max drawdown %", st['limits']['drawdown'])
line("today / week / month PnL", st['pnl'])

print("\n[SOURCE OF TRUTH — TSM]")
s = TSM.snapshot()
line("initialized", s["initialized"])
line("open positions", s["position_count"])
line("capital total/avail/deployed", f"{s['capital']['total']:.0f} / {s['capital']['available']:.0f} / {s['capital']['deployed']:.0f}")
line("realized / unrealized PnL", f"{s['pnl']['realized']:.0f} / {s['pnl']['unrealized']:.0f}")

print("\n[VERDICT]")
ready_offline = (bool(settings.ANGEL_API_KEY) and s["initialized"] and not st.get("kill_switch"))
print("  Offline readiness (config/creds/state):", "OK" if ready_offline else "CHECK")
print("  Live readiness: requires running the server during market hours so brokers")
print("  auto-connect + live feed opens (Phase B checklist). Bot is IDLE until /autonomous/start.")
print("=" * 72)
