from __future__ import annotations

import argparse
import json
from pathlib import Path

from src.research.external_market_context import build_snapshot


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(description="Collect read-only external crypto research context.")
    parser.add_argument("--output", default="runtime/research/external_market_context_latest.json")
    parser.add_argument("--json", action="store_true")
    args = parser.parse_args(argv)
    output = Path(args.output)
    previous = None
    if output.exists():
        try:
            previous = json.loads(output.read_text(encoding="utf-8"))
        except Exception:
            previous = None
    payload = build_snapshot(previous=previous)
    output.parent.mkdir(parents=True, exist_ok=True)
    tmp = output.with_suffix(output.suffix + ".tmp")
    tmp.write_text(json.dumps(payload, indent=2, sort_keys=True), encoding="utf-8")
    tmp.replace(output)
    summary = {
        "status": payload["status"],
        "output": str(output),
        "sources": {key: value.get("status") for key, value in payload["sources"].items()},
        "research_only": True,
        "live_order_allowed": False,
        "mainnet_signed_action": False,
    }
    print(json.dumps(summary, sort_keys=True) if args.json else summary)
    return 0


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