from __future__ import annotations

import argparse
import json
from pathlib import Path

from src.ctb_copy.collector_service import run_copy_research_collection
from src.ctb_copy.reports.daily_copy_report import write_daily_report
from src.ctb_copy.runtime_paths import CopyResearchPaths


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(description="Run one read-only Hyperliquid copy-research collection pass.")
    parser.add_argument("--runtime-dir", default=str(CopyResearchPaths().root))
    parser.add_argument("--wallet", action="append", default=[], help="Wallet address to observe read-only. Can be passed multiple times.")
    parser.add_argument("--vault", action="append", default=[], help="Vault address to observe read-only. Can be passed multiple times.")
    parser.add_argument("--env", default="mainnet", choices=["mainnet", "testnet"])
    parser.add_argument("--no-report", action="store_true", help="Skip daily report rendering.")
    args = parser.parse_args(argv)

    summary = run_copy_research_collection(
        runtime_dir=Path(args.runtime_dir),
        wallet_addresses=args.wallet,
        vault_addresses=args.vault,
        env=args.env,
    )
    report_path = None if args.no_report else write_daily_report(CopyResearchPaths(summary.runtime_dir), summary.day)
    payload = {
        "status": summary.status,
        "runtime_dir": str(summary.runtime_dir),
        "day": summary.day,
        "vault_summaries_count": summary.vault_summaries_count,
        "vault_watchlist_count": summary.vault_watchlist_count,
        "vault_snapshot_count": summary.vault_snapshot_count,
        "vault_collection_status": summary.vault_collection_status,
        "api_response_shape_known": summary.api_response_shape_known,
        "wallet_watchlist_count": summary.wallet_watchlist_count,
        "wallet_snapshots": summary.wallet_snapshots,
        "market_context_snapshots": summary.market_context_snapshots,
        "new_leaders": list(summary.new_leaders),
        "disappeared_leaders": list(summary.disappeared_leaders),
        "data_quality": list(summary.data_quality),
        "partial_errors": list(summary.partial_errors),
        "snapshot_paths": summary.snapshot_paths,
        "watchlist": summary.watchlist,
        "report_path": str(report_path) if report_path else None,
        "read_only": summary.read_only,
        "live_orders": summary.live_orders,
        "vault_deposits": summary.vault_deposits,
        "wallet_execution": summary.wallet_execution,
        "signing_enabled": summary.signing_enabled,
    }
    print(json.dumps(payload, indent=2, sort_keys=True))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
