#!/usr/bin/env python3
"""Python 3.10+, standard library. One public Hyperliquid L2 snapshot, no account or trading."""
import argparse,csv,datetime,json,sys,urllib.request
p=argparse.ArgumentParser(description=__doc__);p.add_argument('--coin',choices=['BTC','ETH','HYPE'],default='BTC');args=p.parse_args()
r=urllib.request.Request('https://api.hyperliquid.xyz/info',data=json.dumps({'type':'l2Book','coin':args.coin}).encode(),headers={'Content-Type':'application/json'},method='POST')
with urllib.request.urlopen(r,timeout=15) as response:book=json.load(response)
if book.get('coin')!=args.coin or len(book.get('levels',[]))!=2:raise RuntimeError('Unexpected book; no CSV emitted')
stamp=datetime.datetime.fromtimestamp(book['time']/1000,datetime.timezone.utc).isoformat()
w=csv.writer(sys.stdout);w.writerow(['source','market','snapshot_utc','side','price','coin_quantity','orders'])
for i,levels in enumerate(book['levels']):
 for row in levels:w.writerow(['Hyperliquid',book['coin'],stamp,'bid' if i==0 else 'ask',row['px'],row['sz'],row['n']])
