"""Inspect an existing Aurora run; default is a local fixture with no HTTP."""
import argparse
import json
import os
from urllib.parse import urlencode, quote
from urllib.request import Request, urlopen

def merge_events(seen, page):
    # The later event supersedes the previous copy, even when its ID repeats.
    for event in page["events"]:
        seen[event["id"]] = event

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--read-existing", action="store_true")
    args = parser.parse_args()
    if not args.read_existing:
        seen = {}
        merge_events(seen, {"events": [{"id": "fixture-a", "digest": "v1", "text": "Draft"}]})
        merge_events(seen, {"events": [{"id": "fixture-a", "digest": "v2", "text": "Updated"},
            {"id": "fixture-b", "digest": "v1", "text": "Finished"}]})
        assert len(seen) == 2 and seen["fixture-a"]["digest"] == "v2"
        print(json.dumps({"mode": "local fixture", "uniqueMessages": len(seen), "editedMessageReplaced": True}))
        return
    agent_id = os.environ["NEXUSTRADE_AGENT_ID"]
    token = os.environ["NEXUSTRADE_API_KEY"]
    root = "https://nexustrade.io/api/v1/nexustrade/agents/" + quote(agent_id, safe="")
    def get(url):
        req = Request(url, headers={"Authorization": "Bearer " + token})
        with urlopen(req, timeout=30) as response:
            return json.load(response)
    state = get(root)["agent"]
    seen, cursor = {}, None
    for _ in range(4):
        query = {"limit": 50}
        if cursor is not None:
            query["cursor"] = cursor
        page = get(root + "/events?" + urlencode(query))
        merge_events(seen, page)
        cursor = page["nextCursor"]
        if not page["hasMore"]:
            break
    print(json.dumps({"mode": "existing account read", "snapshotStatus": state["status"],
        "pageStatus": page["status"], "terminal": page["terminal"],
        "needsInput": page["needsInput"], "pendingApproval": page.get("pendingApproval"),
        "hasMore": page["hasMore"], "uniqueMessages": len(seen)}))
    # Keep cursor verbatim in your private application if continuing later.
    # This sample makes no POST and does not approve, stop or create a run.

if __name__ == "__main__":
    main()
