"""Post-state check, CPU audit and hash-verified download. No production mutation."""
import datetime
import hashlib
import json
import pathlib
from collections import Counter
from control import LOCAL,REMOTE,REPORT,PREFIX,RB,specs,snapshot,resources,checked,scp,args,sync,run


def finish():
    before=json.loads((REPORT/'production_before.json').read_text());after=snapshot('after');changes=[]
    for key in ('config_sha256','pose_engine_sha256','pose_config_sha256','camera24'):
        if before[key]!=after[key]:changes.append(key)
    elapsed=(datetime.datetime.fromisoformat(after['timestamp_utc'])-datetime.datetime.fromisoformat(before['timestamp_utc'])).total_seconds()
    rates=[]
    for sid,a in before['streams'].items():
        b=after['streams'].get(sid,{})
        for key in ('state','run_id','run_generation','child_pid','last_error','cleanup_pending'):
            if a.get(key)!=b.get(key):changes.append(sid+':'+key)
        if a['state']=='running' and a['run_id']==b.get('run_id'):
            rates.extend(dict(provider=name,fps=round((count-a['provider_responses'].get(name,0))/elapsed,3)) for name,count in b['provider_responses'].items())
    if set(before['streams'])!=set(after['streams']):changes.append('stream_set')
    absent=not checked(['docker','ps','-a','--filter','name='+PREFIX,'--format','{{.Names}}']).decode().strip()
    assert absent
    op=dict(changes=changes,containers_unchanged=(REPORT/'containers_before.txt').read_bytes()==(REPORT/'containers_after.txt').read_bytes(),
            states=dict(Counter(r['state'] for r in after['streams'].values())),health_ready=after['health']['ready'],
            trial_containers_absent=absent,observation_seconds=elapsed,resources=resources(gpu=True),provider_completion_fps=rates,
            limitation='Completion counter averages and snapshots, not browser FPS or a performance acceptance test.')
    (REPORT/'operational_comparison.json').write_text(json.dumps(op,indent=2))
    for name in ('operational_comparison.json','layout_review.json','test_contract.py.txt','test_sampling.py.txt'):
        scp(str(REPORT/name),'si@58.233.207.31:'+REMOTE+'/download/validation/')
    scp(str(LOCAL/'00_README_ko.txt'),'si@58.233.207.31:'+REMOTE+'/download/')
    sync();_,cmd=args('audit',next(iter(specs())))
    name=PREFIX+'audit';cmd[cmd.index('--name')+1]=name
    at=cmd.index('--entrypoint');cmd[at:at]=['-v',RB+':/evidence:ro']
    try:output=checked(cmd,timeout=600)
    except BaseException:
        run(['docker','stop','--time','15',name],timeout=40);raise
    (REPORT/'audit.log').write_bytes(output);print(output.decode(),flush=True)
    destination=LOCAL/'Contextra_Pose_Input_Review_20261028';destination.mkdir(exist_ok=False)
    scp('si@58.233.207.31:'+REMOTE+'/download/.',str(destination))
    fingerprints=json.loads((destination/'SHA256SUMS.json').read_text())
    for rel,digest in fingerprints.items():
        path=destination/rel
        assert not pathlib.Path(rel).is_absolute() and '..' not in pathlib.Path(rel).parts and path.is_file() and not path.is_symlink()
        assert hashlib.sha256(path.read_bytes()).hexdigest()==digest,rel
    assert len(list(destination.glob('*/Pose_Input_Review.mp4')))==15
    assert not list(destination.rglob('.*.mp4'))
    assert not checked(['docker','ps','-a','--filter','name='+PREFIX,'--format','{{.Names}}']).decode().strip()
    result=dict(status='PASS',inputs=15,videos=15,reused=11,new=4,files=len(fingerprints),
                bytes=sum(p.stat().st_size for p in destination.rglob('*') if p.is_file()),destination=str(destination),operation=op)
    (REPORT/'transfer_validation.json').write_text(json.dumps(result,indent=2));print(json.dumps(result),flush=True)


if __name__=='__main__':finish()
