from __future__ import annotations

import json

from src.ctb_copy.discovery_registry import DiscoveryRegistry
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_renders_counts_registry_and_readonly_confirmation(tmp_path) -> None:
    paths = CopyResearchPaths(tmp_path / "copy_research")
    ensure_runtime_dirs(paths, "2026-06-14")
    paths.snapshot_file("vaults", "2026-06-14").write_text(json.dumps({"vault_id": "v1"}) + "\n", encoding="utf-8")
    paths.snapshot_file("wallets", "2026-06-14").write_text(json.dumps({"wallet_address": "w1"}) + "\n", encoding="utf-8")
    paths.snapshot_file("market_context", "2026-06-14").write_text(json.dumps({"source": "test"}) + "\n", encoding="utf-8")

    registry = DiscoveryRegistry.load(paths.discovery_registry_file)
    registry.upsert_seen("v1", "vault", "test", seen_at="2026-06-14T08:00:00+00:00")
    registry.upsert_seen("w1", "wallet", "test", seen_at="2026-06-10T08:00:00+00:00", status="blocked", notes="hidden_hedge_risk")
    registry.save()

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

    assert "Vault-Snapshots: 1" in report
    assert "Wallet-Snapshots: 1" in report
    assert "vault:v1" in report
    assert "wallet:w1 (hidden_hedge_risk)" in report
    assert "Live-Freigabe: nein" in report
    assert "Orders: keine" in report
    assert "Vault-Deposits: keine" in report

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