#!/usr/bin/env python3
"""Remote CLI only. Credentials inherited in memory; never printed or persisted."""
import hashlib,json,os,pathlib,resource,subprocess,sys

root=pathlib.Path(__file__).resolve().parent
stage=sys.argv[1]
if stage not in ('native','passthrough','core','recovery'):
    raise SystemExit('stage rejected')
entry={'native':'CapabilityProbe.php','passthrough':'CapabilityProbe.php','core':'CoreTest.php','recovery':'RecoveryProbe.php'}[stage]
pid=53772
raw=pathlib.Path('/proc/%d/environ'%pid).read_bytes()
live={k.decode():v.decode() for k,v in (p.split(b'=',1) for p in raw.split(b'\0') if b'=' in p)}
env={k:v for k,v in os.environ.items() if not k.startswith(('POC_','SHADOW_','DM_PROBE_'))}
for k in ('LD_LIBRARY_PATH','DM_SVC_PATH'):
    if k in live: env[k]=live[k]
for k in ('HOST','PORT','SCHEMA','USER','PASSWORD'):
    env['SHADOW_'+k]=live['POC_AI_'+k]
if (env['SHADOW_HOST'],env['SHADOW_PORT'],env['SHADOW_SCHEMA'])!=('127.0.0.1','5238','AIZHCT_APP'):
    raise SystemExit('approved runtime gate rejected')
def no_core(): resource.setrlimit(resource.RLIMIT_CORE,(0,0))
out=[]
for php in ('73','74'):
    argv=['/www/server/php/'+php+'/bin/php','-n',
          '-d','extension=/home/dmdba/dmdbms/drivers/php_pdo/libphp'+php+'_dm.so',
          '-d','extension=/home/dmdba/dmdbms/drivers/php_pdo/php'+php+'_pdo_dm.so',
          str(root/entry)]
    if stage in ('native','passthrough'):argv.append(stage)
    p=subprocess.run(argv,env=env,cwd=str(root),stdout=subprocess.PIPE,stderr=subprocess.PIPE,timeout=45,preexec_fn=no_core)
    try: report=json.loads(p.stdout)
    except (ValueError,UnicodeError): report={'status':'invalid_output','stdout_bytes':len(p.stdout),'stdout_sha256':hashlib.sha256(p.stdout).hexdigest()}
    item={'php_key':php,'stage':stage,'exit_code':p.returncode,'stderr_bytes':len(p.stderr),'stderr_sha256':hashlib.sha256(p.stderr).hexdigest(),'report':report}
    out.append(item)
    if p.returncode!=0 or p.stderr or report.get('status')!='pass':break
print(json.dumps({'stage':stage,'runs':out},ensure_ascii=False,sort_keys=True))
raise SystemExit(0 if len(out)==2 and all(x['exit_code']==0 and not x['stderr_bytes'] and x['report'].get('status')=='pass' for x in out) else 1)
