"""Read existing portfolio events; default is a local fixture with no HTTP."""
import argparse
import json
import os
from collections import Counter
from datetime import datetime, timedelta, timezone
from urllib.parse import urlencode, quote
from urllib.request import Request, urlopen

def summarize(rows):
    counts = Counter(row.get("eventType", "unknown") for row in rows)
    return {"rows": len(rows), "types": dict(sorted(counts.items()))}

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--read-existing", action="store_true")
    args = parser.parse_args()
    if not args.read_existing:
        # Illustrative fixture, not an account record or a measured trade.
        result = summarize([{"eventType": "BuySignal"}, {"eventType": "OrderRejected"}])
        assert result["types"].get("Order", 0) == 0
        print(json.dumps({"mode": "local fixture", **result}))
        return
    portfolio_id = os.environ["NEXUSTRADE_PORTFOLIO_ID"]
    token = os.environ["NEXUSTRADE_API_KEY"]
    end = datetime.now(timezone.utc)
    start = end - timedelta(hours=24)
    query = urlencode({"page": 1, "pageSize": 50,
        "startDate": start.isoformat(), "endDate": end.isoformat(),
        "eventTypes": "BuySignal,SellSignal,Order,OrderRejected,NoSignal"})
    url = "https://nexustrade.io/api/event/portfolio/" + quote(portfolio_id, safe="") + "?" + query
    request = Request(url, headers={"Authorization": "Bearer " + token})
    with urlopen(request, timeout=30) as response:
        payload = json.load(response)
    rows = payload["events"]
    print(json.dumps({"mode": "existing account read", "start": start.isoformat(),
        "end": end.isoformat(), "totalPages": payload["totalPages"], **summarize(rows)}))

if __name__ == "__main__":
    main()
