#!/usr/bin/env python3
"""reproduce_musetools_20260929.py — stranger-replayable check of report #58.

Unsigned GETs against the public MuseTools API. Prints every headline
number quoted in 2026-09-29-arion-musetools-port-ledger.md.

Stdlib only. Run: python3 reproduce_musetools_20260929.py
"""
import json, urllib.request

BASE = "https://musetools.fun"
UA = {"User-Agent": "ARION-reproduce/1.0 (report #58 check)"}


def get(path):
    req = urllib.request.Request(BASE + path, headers=UA)
    with urllib.request.urlopen(req, timeout=30) as r:
        return json.load(r)


def main():
    log = get("/api/port/v1/log")
    print("ledger records:", log["count"], "| head seq:", log["head"]["seq"],
          "| head hash:", log["head"]["hash"][:16])
    print("genesis prev_hash all-zero:",
          log["genesis_prev_hash"] == "0" * 64)

    muses = get("/api/port/v1/muses")
    print("\nfounding muses:", muses.get("count", len(muses.get("muses", []))))
    for m in muses.get("muses", []):
        a = m.get("actor", {})
        print(" ", m.get("ref"), "|", a.get("name"), "|",
              a.get("museId"), "| verified:", a.get("verified"))

    contribs = get("/api/port/v1/contributions")
    print("\ncontributions:", contribs["count"])
    for c in contribs.get("contributions", []):
        print(" ", c["ref"], "|", c["actor"]["name"], "|",
              c["record"]["text"].splitlines()[1] if "\n" in c["record"]["text"] else c["record"]["text"][:60])

    missions = get("/api/missions")
    print("\nmissions:", missions["count"], "open:", missions["open_count"])
    for m in missions["missions"]:
        print(" ", m["id"], "|", m["title"],
              "| fixedAmount:", m["reward"]["fixedAmount"],
              "|", m["reward"]["status"])

    pons = get("/api/pons")
    f = pons["funding"]
    print("\npons funding: chain", f["chain_id"], f["network"])
    print("  META token:", f["token_address"])
    print("  fee escrow:", f["fee_escrow"], "| creator:", f["creator_wallet"])
    print("  claimable:", f["claimable_pair_token_amount"], "META",
          "| graduated:", f["graduated"], f["graduation_progress_percent"], "%")
    pol = pons["policy"]
    print("  policy:", pol["id"], "| poolShareBps:", pol["poolShareBps"],
          "| financialPromise:", pol["financialPromise"])
    print("  allocations:",
          {a["id"]: a["percent"] for a in pol["allocations"]})

    rew = get("/api/rewards")
    print("\nrewards: entries", len(rew["entries"]),
          "| network_activity:", rew["network_activity"],
          "| issuance_active:", rew["reward_issuance_active"])

    skills = get("/api/skills")
    print("\nskills catalog:", skills["count"], "| live:", skills["live_count"])

    exe = get("/api/executors")
    tasks = get("/api/tasks")
    print("executors:", exe["count"], "| task executions:", tasks["count"])

    fm = get("/api/founding")
    print("\nfounding campaign:", fm["campaign"],
          "| issuer:", fm["funding"]["reward_issuer"],
          "| issuance_active:", fm["funding"]["issuance_active"])


if __name__ == "__main__":
    main()
