import hashlib
import json
import pathlib
import subprocess
import sys

PREP=pathlib.Path('/data/codex-artifacts/contextra/action-model-eval/2026/2026-10-26_contextra-camera24-prep_r01')
sys.path.insert(0,str(PREP/'helpers'))
from remote import run, SSH

LOCAL=pathlib.Path(__file__).resolve().parent.parent
REMOTE='/storage/contextra/experiments/action-model-eval/2026/'+LOCAL.name
OLD='/storage/contextra/experiments/action-model-eval/2026/2026-10-26_contextra-camera24-eval_r01'
NAME='contextra-tracking-review-20261027-r01'
def checked(args,**kw):
    p=run(args,**kw)
    if p.returncode: raise RuntimeError(p.stderr.decode()[-3000:]+p.stdout.decode()[-1000:])
    return p.stdout
def scp(source,target):
    subprocess.run(['scp','-q','-r','-i',SSH[2],'-o',SSH[4],'-o','StrictHostKeyChecking=yes','-P','1022',source,target],check=True,timeout=300)
def snapshot(label):
    data=checked(['docker','exec','-i','contextra-ai2-analytics-1','python3','-'],data=(PREP/'helpers/snapshot.py').read_bytes(),timeout=90)
    (LOCAL/'reports'/f'production_{label}.json').write_bytes(data)
    return json.loads(data)
if __name__=='__main__':
    for p in ['reports','outputs','inputs']: (LOCAL/p).mkdir(exist_ok=True)
    if sys.argv[1]=='prepare':
        checked(['test','!','-e',REMOTE])
        checked(['mkdir',REMOTE],sudo=True)
        checked(['chown','si:si',REMOTE],sudo=True)
        checked(['chmod','700',REMOTE])
        checked(['mkdir',REMOTE+'/helpers',REMOTE+'/outputs',REMOTE+'/reports',REMOTE+'/inputs'])
        scp(str(LOCAL/'helpers/render_tracking.py'),'si@58.233.207.31:'+REMOTE+'/helpers/')
        scp('/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc','si@58.233.207.31:'+REMOTE+'/inputs/')
        snapshot('before')
        print('PREPARED',flush=True)
    elif sys.argv[1]=='render':
        free=int(checked(['df','-B1','--output=avail','/']).decode().splitlines()[-1])
        assert free>=15*1024**3
        image=checked(['docker','inspect','contextra-ai2-analytics-1','--format','{{.Image}}']).decode().strip()
        args=['docker','run','--rm','--name',NAME,'--runtime','runc','--user','0:0','--read-only','--cap-drop','ALL','--cap-add','DAC_OVERRIDE',
              '--security-opt','no-new-privileges','--cpus','2','--memory','8g','--pids-limit','256','--network','none','--shm-size','256m',
              '--tmpfs','/tmp:rw,size=512m','-e','NVIDIA_VISIBLE_DEVICES=void','-e','PYTHONDONTWRITEBYTECODE=1','-e','OMP_NUM_THREADS=2','-e','OPENBLAS_NUM_THREADS=2',
              '-v',REMOTE+':/trial','-v',OLD+':/old:ro','--entrypoint','python3',image,'/trial/helpers/render_tracking.py']
        (LOCAL/'reports/trial_contract.json').write_text(json.dumps({'image':image,'args':args},indent=2))
        try: p=run(args,timeout=1200)
        except BaseException:
            run(['docker','stop','--time','10',NAME],timeout=30)
            raise
        (LOCAL/'reports/render_console.log').write_bytes(p.stdout+p.stderr)
        print(p.stdout.decode()[-5000:],p.stderr.decode()[-2000:],flush=True)
        if p.returncode: raise SystemExit(p.returncode)
        snapshot('after')
    elif sys.argv[1]=='download':
        for part in ['outputs','reports']: scp('si@58.233.207.31:'+REMOTE+'/'+part+'/.',str(LOCAL/part))
        p=LOCAL/'outputs/camera24_tracking_skeleton_10fps.mp4'
        digest=hashlib.sha256(p.read_bytes()).hexdigest()
        assert digest==json.loads((LOCAL/'reports/validation.json').read_text())['video_sha256']
        print('VIDEO_SHA256_MATCH',digest)
