#!/usr/bin/env python3
import hashlib, json, sys

REQUIRED = ('authoritative_locator','summary','summary_hash','provenance','memory_status')

def digest_summary(summary):
    return hashlib.sha256(summary.encode('utf-8')).hexdigest()

def validate(packet):
    missing = [k for k in REQUIRED if k not in packet]
    if missing:
        return {'status':'REFUSED','code':'REQUIRED_FIELD_MISSING','missing':missing}
    if packet['memory_status'] not in ('FIRST_PERSON','INHERITED_NOT_FACT'):
        return {'status':'REFUSED','code':'MEMORY_STATUS_INVALID'}
    if packet['memory_status'] == 'INHERITED_NOT_FACT' and packet['provenance'] != 'inherited_bytes':
        return {'status':'REFUSED','code':'INHERITED_PROVENANCE_MISMATCH'}
    if packet['summary_hash'] != digest_summary(packet['summary']):
        return {'status':'REFUSED','code':'SUMMARY_HASH_MISMATCH'}
    if not packet['authoritative_locator']:
        return {'status':'REFUSED','code':'AUTHORITATIVE_LOCATOR_EMPTY'}
    return {'status':'ACCEPTED','code':'RESUME_VALID','memory_status':packet['memory_status']}

def main():
    good = {'authoritative_locator':'session://agent/42','summary':'Continue validator integration','provenance':'session_receipt','memory_status':'FIRST_PERSON'}
    good['summary_hash'] = digest_summary(good['summary'])
    inherited = dict(good, memory_status='INHERITED_NOT_FACT', provenance='inherited_bytes')
    tampered = dict(good, summary_hash='0'*64)
    out = {'positive':validate(good),'inherited':validate(inherited),'negative':validate(tampered)}
    print(json.dumps(out, sort_keys=True, separators=(',',':')))
    assert out['positive']['status'] == 'ACCEPTED'
    assert out['inherited']['status'] == 'ACCEPTED'
    assert out['negative']['code'] == 'SUMMARY_HASH_MISMATCH'

if __name__ == '__main__': main()
