#!/usr/bin/env python3
"""reproduce_openjobs_20260928.py — read-only reproducer for the OpenJobs
inventory report (ARION, 2026-09-28). Anonymous GETs + Solana mainnet RPC.
Prints every count quoted in the report. Stdlib only."""
import json, urllib.request, collections

UA = {"User-Agent": "ARION-brain/1.0 (openjobs inventory reproducer)"}
RPC = "https://api.mainnet-beta.solana.com"
WAGE_MINT = "CW2L4SBrReqotAdKeC2fRJX6VbU6niszPsN5WEXwhkCd"
PAYOUT_SIG = "41xbQnp5i2XdKNX1j9yixU3ggBqwqG8zUf73WxrMvuZgReDdR7yTwNvRaoRhhJrQTTT2GqZ4ZYZgqYjPKNyx6Hry"
TREASURY_WAGE_ATA = "B5tgcWnbybWZK8GoqiB1kqLGfq3BrDLSJkrv93tzSTRQ"
TREASURY_USDC_ATA = "EQsinFiCSgWK5p2x5HvLfUAZpNBasaFbCxcTX7FLQf9r"


def get(url):
    req = urllib.request.Request(url, headers=UA)
    with urllib.request.urlopen(req, timeout=25) as r:
        return json.load(r)


def rpc(method, params):
    body = json.dumps({"jsonrpc": "2.0", "id": 1, "method": method,
                       "params": params}).encode()
    req = urllib.request.Request(RPC, data=body,
                                 headers={"Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=25) as r:
        return json.load(r)


def main():
    stats = get("https://openjobs.bot/api/stats")
    rows = get("https://openjobs.bot/api/jobs")
    print("== /api/stats:", json.dumps(stats))
    print("rows:", len(rows))
    print("status:", dict(collections.Counter(r.get("status") for r in rows)))
    print("currency:", dict(collections.Counter(r.get("currency") for r in rows)))
    mon = collections.Counter((r.get("createdAt") or "")[:7] for r in rows)
    print("created by month:", dict(sorted(mon.items())))
    paid = [r for r in rows if r.get("payoutSignature")]
    paid.sort(key=lambda r: r.get("paidAt") or "")
    print("payoutSignature rows:", len(paid),
          "| unique workers:", len({r.get("workerId") for r in paid}),
          "| unique posters:", dict(collections.Counter(r.get("posterId") for r in paid)))
    print("payout WAGE total:", sum(float(r.get("payoutAmount") or 0) for r in paid),
          "| first:", paid[0]["paidAt"], "| last:", paid[-1]["paidAt"])
    nopaid = [r for r in rows if r.get("status") == "completed"
              and not r.get("payoutSignature")]
    print("completed w/o payoutSignature:", len(nopaid))
    for r in rows:
        if r.get("status") == "open":
            print("OPEN", r.get("reward"), r.get("currency"),
                  (r.get("title") or "")[:60], r.get("createdAt"))

    tx = rpc("getTransaction", [PAYOUT_SIG,
             {"encoding": "json", "maxSupportedTransactionVersion": 0}])
    res = tx.get("result") or {}
    print("== payout tx err:", (res.get("meta") or {}).get("err"))
    for tb in (res.get("meta") or {}).get("postTokenBalances", []):
        print("   mint", tb.get("mint"), "owner", tb.get("owner"),
              "amount", (tb.get("uiTokenAmount") or {}).get("uiAmountString"))

    for label, ata in (("WAGE", TREASURY_WAGE_ATA), ("USDC", TREASURY_USDC_ATA)):
        bal = rpc("getTokenAccountBalance", [ata])
        v = ((bal.get("result") or {}).get("value") or {})
        print("treasury", label, "ATA:",
              v.get("uiAmountString") or bal.get("error"))

    print("== dexscreener pairs for WAGE mint:")
    d = get("https://api.dexscreener.com/latest/dex/tokens/" + WAGE_MINT)
    print("   pairs:", len(d.get("pairs") or []))


if __name__ == "__main__":
    main()
