import csv
import json
import pathlib
import av
import numpy as np

root=pathlib.Path('/eval')
if (root/'reports/pose_summary.json').exists():
    assert json.loads((root/'reports/pose_summary.json').read_text())['status']=='PASS'
    print('REUSE_POSE_PASS'); raise SystemExit(0)
pts=[]
with av.open('/source.mp4') as v:
    for f in v.decode(video=0): pts.append(float(f.pts*f.time_base))
assert pts and all(b>a for a,b in zip(pts,pts[1:]))
pts=np.array(pts)-pts[0]
with (root/'inputs/source_map.csv').open('w') as f:
    w=csv.writer(f); w.writerow(['frame_1based','elapsed_seconds']); w.writerows(enumerate(pts,1))
source=pathlib.Path('/basehelpers/pose_extract.py').read_text()
def swap(a,b):
    global source
    assert a in source,a
    source=source.replace(a,b)
swap("rows=list(csv.DictReader(open('/work/inputs/camera24_frame_map.csv')))","rows=list(csv.DictReader(open('/eval/inputs/source_map.csv')))")
swap('grid=np.arange(400)/10.',"grid=np.arange(int(np.floor(pts[-1]*10))+1)/10.")
swap('len(set(indices))==400','len(set(indices))==len(grid)')
swap("'/work/inputs/camera24_original.mp4'","'/source.mp4'")
swap('assert len(all_rows)==400','assert len(all_rows)==len(grid)')
(root/'reports/pose_executed.py').write_text(source)
exec(compile(source,'pose_executed.py','exec'))
