from __future__ import annotations

import json

from src.trader_desk.finance_bridge import export_finance_snapshot, trader_desk_to_finance_snapshot
from tests.test_trader_desk import _payload
from src.trader_desk.decision import build_trader_desk_report


def _desk_payload():
    report = build_trader_desk_report(_payload())
    return {"status": "ok", "report": report.to_dict(), "live_order_allowed": False, "mainnet_signed_action": False}


def test_finance_bridge_exports_trade_intents_without_execution_permission():
    snapshot = trader_desk_to_finance_snapshot(_desk_payload())

    assert snapshot["schema_version"] == "finance_crypto_trader_desk_bridge.v1"
    assert snapshot["safety_boundary"]["dashboard_executes_orders"] is False
    assert snapshot["safety_boundary"]["execution_allowed"] is False
    assert snapshot["live_order_allowed"] is False
    assert snapshot["mainnet_signed_action"] is False
    assert snapshot["trade_intents"]
    btc = next(row for row in snapshot["trade_intents"] if row["coin"] == "BTC")
    assert btc["source_engine"] == "jarvis_trader_desk_v1"
    assert btc["mode"] == "approval"
    assert btc["status"] == "awaiting_final_preflight"
    assert btc["execution_allowed"] is False
    assert btc["dashboard_executes_orders"] is False
    assert btc["intent_id"]


def test_finance_bridge_writes_json_and_markdown(tmp_path):
    target = tmp_path / "crypto_trader" / "trader_desk_latest.json"
    result = export_finance_snapshot(_desk_payload(), target=target)

    assert result["status"] == "ok"
    assert result["execution_allowed"] is False
    assert target.exists()
    assert target.with_suffix(".md").exists()
    payload = json.loads(target.read_text())
    assert payload["portfolio"]["venue"] == "Hyperliquid"
    assert payload["trade_intents"][0]["mainnet_signed_action"] is False
    assert "execution_allowed=false" in target.with_suffix(".md").read_text()
