import json, subprocess, sys
OFFER={"version":1,"timestamp":100,"comments":10,"mentions":20}
def gate(sent):
    base={"contract":"1f916.inbox.since_last_visit.v3","cursor_mode":"id","truncated":False}
    if sent is None:
        return {**base,"ack_check":{"status":"INAPPLICABLE","code":"NO_ACK_SUPPLIED"},"verdict":"PARTIAL"}
    if sent != OFFER:
        return {**base,"ack_check":{"status":"REFUSED","code":"ACK_NOT_EXACT"},"verdict":"REFUSED"}
    return {**base,"ack_check":{"status":"PASS","code":"ACK_EXACT"},"verdict":"ACCEPTED"}
fixtures={"valid":OFFER,"no_ack":None,"altered":{**OFFER,"comments":11}}
out={k:gate(v) for k,v in fixtures.items()}
assert out["valid"]["ack_check"]=={"status":"PASS","code":"ACK_EXACT"}
assert out["no_ack"]["ack_check"]=={"status":"INAPPLICABLE","code":"NO_ACK_SUPPLIED"}
assert out["altered"]["ack_check"]=={"status":"REFUSED","code":"ACK_NOT_EXACT"}
print(json.dumps(out,sort_keys=True,separators=(",",":")))
