"""Transfer evidence and package existing files; no stream capture or rendering."""
import hashlib
import json
import pathlib
import shutil
import subprocess
import sys

root = pathlib.Path(__file__).resolve().parent.parent
remote = '/storage/contextra/experiments/action-model-eval/2026/' + root.name
sys.path.insert(0, '/data/codex-artifacts/contextra/action-model-eval/2026/2026-10-26_contextra-camera24-prep_r01/helpers')
from remote import run, SSH
scp = ['scp'] + SSH[1:-3] + ['-P', SSH[-2]]

def command(args, timeout=120):
    r = run(args, timeout=timeout)
    if r.returncode:
        raise RuntimeError('Evidence command failed: ' + str(r.returncode))
    return r.stdout

def send(paths, destination):
    p = subprocess.run(scp + list(map(str, paths)) + [SSH[-1] + ':' + destination], capture_output=True, timeout=240)
    assert p.returncode == 0, 'Evidence transfer failed'

results = json.loads((root / 'reports/batch_results.json').read_text())
for row in results:
    cid = row['camera_id']
    folder = root / f'camera{cid}/reports'
    if folder.exists():
        send([p for p in folder.glob('*.json') if p.name in ('record_execution.json', 'review_execution.json', 'registration.json', 'transfer_validation.json')], remote + f'/camera{cid}/reports/')
    if row['status'] == 'DEFERRED_CAPTURE':
        info = json.loads(command(['python3', '-c', "import pathlib,json; p=pathlib.Path(" + repr(remote + f'/camera{cid}') + "); print(json.dumps({'capture_report':(p/'reports/capture.json').exists(),'original_bytes':(p/'inputs/camera" + str(cid) + "_original.mp4').stat().st_size if (p/'inputs/camera" + str(cid) + "_original.mp4').exists() else None}))"]))
        (folder / 'remote_failure_inventory.json').write_text(json.dumps(info, indent=2))
        if info['capture_report']:
            p = subprocess.run(scp + [SSH[-1] + ':' + remote + f'/camera{cid}/reports/capture.json', str(folder / 'capture.json')], capture_output=True, timeout=60)
            assert p.returncode == 0
        send([folder / 'remote_failure_inventory.json'], remote + f'/camera{cid}/reports/')
provenance = {}
for p in (root / 'helpers').rglob('*.py'):
    provenance[str(p.relative_to(root))] = hashlib.sha256(p.read_bytes()).hexdigest()
for path in [
    '/data/codex-artifacts/contextra/action-model-eval/2026/2026-10-27_contextra-four-scenarios-prep_r01/helpers/batch_job.py',
    '/data/codex-artifacts/contextra/action-model-eval/2026/2026-10-26_contextra-camera24-prep_r01/helpers/remote.py',
]:
    p = pathlib.Path(path)
    provenance[path] = hashlib.sha256(p.read_bytes()).hexdigest()
(root / 'reports/helper_fingerprints.json').write_text(json.dumps(provenance, indent=2))
send(list((root / 'reports').glob('*.json')), remote + '/reports/')
send([root / 'manifest.json', root / 'web_registration.json', root / 'checkpoint.ko.md'], remote + '/')
command(['mkdir', '-p', remote + '/helpers'])
send(list((root / 'helpers').glob('*.py')), remote + '/helpers/')
subprocess.run([sys.executable, str(root / 'helpers/package.py')], check=True)
print(command(['python3', remote + '/helpers/package.py'], timeout=180).decode())
folder = 'Contextra_Camera6-21_Frame_Review'
local = json.loads((root / folder / 'SHA256.json').read_text())
other = json.loads(command(['python3', '-c', 'import pathlib;print(pathlib.Path(' + repr(remote + '/' + folder + '/SHA256.json') + ').read_text())']))
assert local == other, 'Package checksum mismatch'
report = {'package_files': len(local), 'both_servers_size_sha256_match': True, 'windows_copy_performed': False}
(root / 'reports/package_validation.json').write_text(json.dumps(report, indent=2))
send([root / 'reports/package_validation.json'], remote + '/reports/')
print(json.dumps(report))
