"""Synthetic sequential replay of two requests reading one inventory version.

No agents, network, database, game, or customer records are used.
The guarded operation is one in-memory step, not production transaction code.
"""
import json


def run_demo():
    snapshot = {"available": 1, "version": 7}
    requests = [
        {"job": "fictional-A", "expected_version": snapshot["version"]},
        {"job": "fictional-B", "expected_version": snapshot["version"]},
    ]
    unsafe = dict(snapshot)
    unsafe_claims = []
    for request in requests:
        # Both callers act on the same previously read snapshot.
        if snapshot["available"] > 0:
            unsafe["available"] -= 1
            unsafe_claims.append(request["job"])

    guarded = dict(snapshot)
    outcomes = []
    for request in requests:
        # A real service must execute this check-and-write atomically.
        if (request["expected_version"] != guarded["version"]
                or guarded["available"] < 1):
            outcomes.append({"job": request["job"], "status": "stale-or-unavailable"})
            continue
        guarded["available"] -= 1
        guarded["version"] += 1
        outcomes.append({"job": request["job"], "status": "reserved",
                         "reservation": "fictional-reservation-1",
                         "accepted_version": guarded["version"]})
    assert len(unsafe_claims) == 2 and unsafe["available"] == -1
    assert guarded == {"available": 0, "version": 8}
    assert [item["status"] for item in outcomes] == ["reserved", "stale-or-unavailable"]
    return {"unsafe": {"claims": unsafe_claims, "stock": unsafe["available"]},
            "guarded": {"stock": guarded["available"], "outcomes": outcomes}}


if __name__ == "__main__":
    print(json.dumps(run_demo(), indent=2))
