"""Observed relative torso response for close-interaction evidence."""
import bootstrap
import hashlib
import json
import math
import os
from inputs import OUT
from augment import joints,midpoint

clip=os.environ['CLIP'];dest=OUT/'work'/clip;raw=(dest/'features.jsonl').read_bytes()
src_hash=hashlib.sha256(raw).hexdigest();done=dest/'enriched_summary.json'
if done.exists():
    s=json.loads(done.read_text());assert s['source_sha256']==src_hash
    assert s['sha256']==hashlib.sha256((dest/'enriched.jsonl').read_bytes()).hexdigest()
    print('REUSED',clip);raise SystemExit(0)
past={};n=0
with (dest/'enriched.jsonl').open('w') as output:
    for line in raw.splitlines():
        r=json.loads(line);t=r['seconds']
        for p in r['pairs']:
            for f in p['features']:
                prev=past[(p['token'],f['input_start'])];a=f['actor'];b=1-a
                pa,na=joints(prev[a]),joints(p['bodies'][a]);pb,nb=joints(prev[b]),joints(p['bodies'][b])
                f.update(response_speed=None,response_motion=None,response_cosine=None,response_anchor=None)
                for aa,bb in ((5,6),(11,12)):
                    ps,ns=midpoint(pb,aa,bb),midpoint(nb,aa,bb)
                    if ps is None or ns is None:continue
                    root=f['root'];scale=p['bodies'][a]['height']/prev[a]['height'];unit=max(1,p['bodies'][a]['height'])
                    d=[((ns[i]-na[root][i])-(ps[i]-pa[root][i])*scale)/unit for i in (0,1)]
                    length=math.hypot(*d);den=length*math.hypot(*f['delta'])
                    f.update(response_speed=length/f['elapsed'],response_motion=length,
                        response_cosine=sum(x*y for x,y in zip(d,f['delta']))/den if den>1e-10 else 0.,response_anchor=[aa,bb])
                    break
                n+=1
            past[(p['token'],t)]=p['bodies']
        past={k:v for k,v in past.items() if t-k[1]<=.35}
        output.write(json.dumps(r,separators=(',',':'))+'\n')
done.write_text(json.dumps(dict(status='PASS',source_sha256=src_hash,sha256=hashlib.sha256((dest/'enriched.jsonl').read_bytes()).hexdigest(),features=n),indent=2))
print('RESPONSE_PASS',clip,n,flush=True)
