from __future__ import annotations

import json

from src.ctb_copy.reports.daily_copy_report import collect_report_stats, render_daily_report, write_daily_report
from src.ctb_copy.runtime_paths import CopyResearchPaths, ensure_runtime_dirs


def test_daily_report_v11_handles_empty_watchlist_and_safety(tmp_path) -> None:
    paths = CopyResearchPaths(tmp_path / "copy_research")
    ensure_runtime_dirs(paths, "2026-06-14")
    paths.watchlist_file.write_text(json.dumps({"version": 1, "wallets": [], "vaults": []}) + "\n")
    paths.snapshot_file("market_context", "2026-06-14").write_text(json.dumps({"summary": {"api_status": "ok", "universe_count": 4, "perp_dex_count": 1, "all_mids_count": 3, "meta_count": 4, "core_symbols_available": {"BTC": True}, "research_alt_available": {"WLD": False}}}) + "\n")
    paths.collector_result_file("2026-06-14").write_text(json.dumps({
        "data_quality": ["ok"],
        "partial_errors": [],
        "new_leaders": [],
        "disappeared_leaders": [],
        "vault_summaries_count": 0,
        "vault_watchlist_count": 0,
        "vault_collection_status": "ok",
        "api_response_shape_known": True,
        "snapshot_paths": {"market_context": str(paths.snapshot_file("market_context", "2026-06-14"))},
        "guard": {"read_only": True, "live_orders": False, "vault_deposits": False, "wallet_execution": False, "signing_enabled": False},
    }) + "\n")
    paths.shadow_result_file("2026-06-14").write_text(json.dumps({
        "status": "ok_no_wallet_snapshots",
        "decisions_count": 0,
        "allowed_count": 0,
        "blocked_count": 0,
        "ignored_count": 0,
        "top_block_reasons": {},
        "symbols_observed": [],
        "leaders_observed": [],
        "estimated_total_notional_allowed": "0",
        "read_only_guard": {"read_only": True, "live_orders": False, "vault_deposits": False, "wallet_execution": False, "signing_enabled": False},
    }) + "\n")

    stats = collect_report_stats(paths, "2026-06-14")
    report = render_daily_report(stats)

    assert "Watchlist-Datei vorhanden: ja" in report
    assert "Enabled Wallets: 0" in report
    assert "Enabled Vaults: 0" in report
    assert "Keine Wallets in watchlist.json aktiviert. Wallet-Snapshots deshalb 0." in report
    assert "read_only: true" in report
    assert "live_orders: false" in report
    assert "vault_deposits: false" in report
    assert "wallet_execution: false" in report
    assert "signing_enabled: false" in report
    assert "Snapshot-Pfade" in report
    assert "Discovery Registry Summary" in report
    assert "## Shadow Portfolio v0" in report
    assert "shadow_decisions_count: 0" in report
    assert "## 24h Observation Run Status" in report
    assert "run_started_at: not_started" in report
    assert "expected_cycles_total: 12" in report
    assert "Noch keine Position-Deltas erkannt. Das ist im frühen Beobachtungslauf kein Fehler." in report
    assert "Keine Shadow-Positionen erzeugt: keine aktivierten Wallets oder keine Positionsänderungen." in report

    target = write_daily_report(paths, "2026-06-14")
    assert target.read_text(encoding="utf-8") == report
