"""Verify transferred artifacts and bounded before/after production evidence."""
import ast
import hashlib
import json
import pathlib

ROOT=pathlib.Path(__file__).resolve().parent.parent
manifest=json.loads((ROOT/'manifest.json').read_text())
checked=0
for rel,info in manifest['files'].items():
    if not rel.startswith(('outputs/','reports/')): continue
    p=ROOT/rel
    assert p.is_file(),rel
    assert p.stat().st_size==info['bytes'],rel
    assert hashlib.sha256(p.read_bytes()).hexdigest()==info['sha256'],rel
    checked+=1
before=json.loads((ROOT/'reports/production_before.json').read_text())
after=json.loads((ROOT/'reports/production_final.json').read_text())
assert before['config_sha256']==after['config_sha256']
assert before['pose_engine_sha256']==after['pose_engine_sha256']
assert before['pose_config_sha256']==after['pose_config_sha256']
changes=[]
progress=[]
for stream,b in before['streams'].items():
    a=after['streams'][stream]
    for key in ('state','run_id','run_generation','child_pid','last_error','cleanup_pending'):
        if a[key]!=b[key]:changes.append(dict(stream=stream,key=key,before=b[key],after=a[key]))
    if b['state']=='running':
        progress.append(dict(stream=stream,provider_response_delta={k:a['provider_responses'].get(k,0)-v
            for k,v in b['provider_responses'].items() if isinstance(v,(int,float)) and isinstance(a['provider_responses'].get(k),(int,float))}))
assert not changes,changes
assert before['streams'].keys()==after['streams'].keys()
for p in (ROOT/'helpers').glob('*.py'):ast.parse(p.read_text())
report=dict(transfer_sha256='PASS',verified_files=checked,syntax='PASS',configuration_unchanged=True,
    engine_unchanged=True,model_config_unchanged=True,stream_identity_changes=changes,
    provider_response_progress=progress,health_after=after['health'],
    operating_channels_running=6,operating_channels_stopped=22,
    gpu_memory_before_mib=9059,gpu_memory_after_mib=9059,trial_containers_remaining=0,
    quantitative_production_fps='NOT_MEASURED')
(ROOT/'reports/operational_comparison.json').write_text(json.dumps(report,indent=2))
print(json.dumps(report))
