import json
import os
from pathlib import Path
import subprocess
import sys
import time

os.umask(0o077)
R=Path(__file__).parent
REPO=Path('/workspace/contextra-analytics-runtime-lifecycle-refactor')
sys.path.insert(0,str(REPO))
from model_tooling.video import sha256


def snapshot():
    ids=subprocess.check_output(['docker','ps','-aq'],text=True).split()
    records=json.loads(subprocess.check_output(['docker','inspect',*ids],text=True))
    result={}
    for c in records:
        if c['Name'].startswith(('/contextra-fire-video-','/codex-ltb1021-fire-video-')):continue
        result[c['Id']]=dict(image=c['Image'],state=c['State']['Status'],restart_count=c['RestartCount'],
            restart_policy=c['HostConfig']['RestartPolicy'],env=c['Config']['Env'],
            mounts=sorted(c['Mounts'],key=lambda m:m['Destination']),oom=c['State']['OOMKilled'])
    return result


if __name__=='__main__':
    assert not (R/'ledger.json').exists()
    assert subprocess.check_output(['git','-C',str(REPO),'rev-parse','HEAD'],text=True).strip()=='97a6be01302634415423c0e3d8aecd692a3c1344'
    (R/'before.private.json').write_text(json.dumps(snapshot(),indent=2))
    ledger=dict(started_utc='2026-09-14T00:43:19Z',tests='23 PASS',model_comparison_runs=1,
                production_api_calls=0,image_build=0,model_conversion=0,start=0,correction_failures=0,status='RUNNING')
    (R/'ledger.json').write_text(json.dumps(ledger,indent=2))
    cmd=['python3','-m','model_tooling.fire_video','--input','/data/playlist/uploads/260521_화재추론샘플_시뮬레이션영상',
         '--output',str(R),'--mode','compare','--fps','10','--max-frames','200','--max-output-gib','1','--timeout','600']
    with (R/'launch.log').open('x') as log:
        p=subprocess.run(cmd,cwd=REPO,stdout=log,stderr=log,timeout=650)
    ledger.update(exit=p.returncode,status='COMPLETE' if p.returncode==0 else 'FAILED',finished_utc=time.strftime('%Y-%m-%dT%H:%M:%SZ',time.gmtime()))
    (R/'ledger.json').write_text(json.dumps(ledger,indent=2))
    after=snapshot();(R/'after.private.json').write_text(json.dumps(after,indent=2))
    assert after==json.loads((R/'before.private.json').read_text())
    print(json.dumps(dict(exit=p.returncode,service_unchanged=True)))
