#!/usr/bin/env python3
import base64
import hashlib
import json
import shlex
import subprocess
import sys
from pathlib import Path
root=Path(__file__).parent
lane=sys.argv[1];assert lane in ('B','C')
gate=False
assert lane=='C'
plan=(root/'probe2b-full77-time-proposal.json').read_bytes()
assert hashlib.sha256(plan).hexdigest()=='89343d0caf38bb47b863e6b70e731bbfeb8a10f3a4116ddf1019d5375c96e0fc'
expected={}
for key in ('B','C'):
 events=[json.loads(line)for line in(root/'probe2a-private-evidence'/(key+'-probe2a.jsonl')).read_text().splitlines()]
 expected[key]=next(event['data']for event in events if event['kind']=='business-after')
assert hashlib.sha256((root/'probe2a-private-evidence/manifest.json').read_bytes()).hexdigest()=='2521aa96f70aaccee1a16e41665053895b7527b8e812f29214731868ea3b01b8'
prefix='<?php\n$plan=json_decode(base64_decode('+repr(base64.b64encode(plan).decode())+'),true);\n$expected=json_decode(base64_decode('+repr(base64.b64encode(json.dumps(expected,ensure_ascii=False).encode()).decode())+'),true);\n'
payload=prefix.encode()+(root/'probe2b-recovery-read.php').read_bytes().removeprefix(b'<?php')
pid=10001 if lane=='B'else 112175
php='/usr/local/php7.3/bin/php'if lane=='B'else'/www/server/php/73/bin/php'
child=php if lane=='B'else php+' -c /www/server/php/73/etc/php-cli.ini -d extension=/home/dmdba/dmdbms/drivers/php_pdo/libphp73_dm.so -d extension=/home/dmdba/dmdbms/drivers/php_pdo/php73_pdo_dm.so'
parent='/tmp/zhct-http-store-mysql.dQTTBP'if lane=='B'else'/tmp/zhct-dm-poc-20260928.fcpiiN/store'
wrapper='$env=[];foreach(explode(chr(0),file_get_contents("/proc/'+str(pid)+'/environ"))as $s){$v=explode("=",$s,2);if(count($v)===2)$env[$v[0]]=$v[1];}if(($env["POC_EXTERNAL_STUBS"]??"")!=="1"||($env["POC_REAL_QUEUE"]??"0")!=="0")exit(78);$env["SS_LANE"]="'+lane+'";$env["SS_ROOT"]="'+parent+'";$env["SS_GATE_TEST"]="'+('1'if gate else'0')+'";$p=proc_open('+repr(child)+',[0=>STDIN,1=>STDOUT,2=>STDERR],$pipes,null,$env);exit(proc_close($p));'
args=['docker','exec','-i','zhctapp_v2_0',php,'-r',wrapper]if lane=='B'else['ssh','-S','/private/tmp/cdx-train-root-20261010.sock','-o','BatchMode=yes','root@121.43.241.161',php+' -r '+shlex.quote(wrapper)]
if gate:
 result=subprocess.run(args,input=payload,stdout=subprocess.PIPE,stderr=subprocess.PIPE,check=False)
 print(result.stdout.decode());print(result.stderr.decode(),file=sys.stderr);raise SystemExit(result.returncode)
private=root/'probe2b-private-evidence';private.mkdir(mode=0o700,exist_ok=True)
with(private/(lane+'-recovery-preflight.json')).open('xb')as output,(private/(lane+'-recovery-preflight.stderr')).open('xb')as error:
 (private/(lane+'-recovery-preflight.json')).chmod(0o600);(private/(lane+'-recovery-preflight.stderr')).chmod(0o600)
 result=subprocess.run(args,input=payload,stdout=output,stderr=error,check=False)
print(lane,'probe2B exit',result.returncode)
last=(private/(lane+'-recovery-preflight.json')).read_text().splitlines()
if last:
 event={'kind':'readonly-recovery-preflight','data':{'SELECT':json.loads(last[-1])['SELECT']}}
 if event['kind']=='summary':
  event['data']['case_results_count']=len(event['data'].pop('case_results',[]))
 print(json.dumps(event,ensure_ascii=False))
raise SystemExit(result.returncode)
