<?php
require __DIR__.'/apps.php';
$phase=getenv('PP_PHASE');$role=$phase==='code'?'store':'ai';
try{
 pp_need(in_array($phase,['code','scan'],true),'Only two authorized HTTP methods');$request=pp_saved($phase==='code'?'DISPATCH_1.json':'scan-request.json');$path=$phase==='code'?'/api/prepayOrder/code':'/api/PrepayOrder/scan';$body=file_get_contents('php://input');
 pp_need($_SERVER['REQUEST_METHOD']==='POST'&&parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH)===$path&&($_SERVER['QUERY_STRING']??'')===''&&($_SERVER['HTTP_HOST']??'')==='prepay.code-scan.invalid'&&$body===$request['body'],'Original exact method/path/host/body');
 if($phase==='scan')pp_need(($_SERVER['HTTP_PLATFORM']??'')==='POC'&&($_SERVER['HTTP_ACCESS_TOKEN']??'')===pp_saved('token.json')['token'],'Real own original Auth profile/token');
 pp_save('worker-attempt-'.$phase.'.json',['at'=>microtime(true),'body_sha256'=>hash('sha256',$body)]);
 if($role==='store'){pp_store();$_SERVER['SCRIPT_FILENAME']=getenv('PP_STORE_PARENT').'/public/index.php';$_SERVER['SCRIPT_NAME']='/index.php';$_SERVER['PHP_SELF']='/index.php';$start=microtime(true);$response=\think\App::run();$end=microtime(true);}else{$_SERVER['SCRIPT_FILENAME']=pp_base().'/source/ai/public/index.php';$_SERVER['SCRIPT_NAME']='/index.php';$_SERVER['PHP_SELF']='/index.php';$app=pp_ai();$start=microtime(true);$http=$app->http;$response=$http->run();$end=microtime(true);}
 // Mature save → send → isolated observer ordering; never regenerate a DTO from the DB.
 pp_save('response-'.$phase.'.json',['status'=>$response->getCode(),'headers'=>$response->getHeader(),'body'=>$response->getContent(),'start'=>$start,'end'=>$end]);$response->send();
 try{pp_save('worker-proof-'.$phase.'.json',['includes'=>pp_includes($role),'native_DML'=>PPGate::$counts,'generated'=>PPGate::$generated,'orderNo'=>PPGate::$orderNo]);}catch(Throwable $e){pp_save('worker-observer-error-'.$phase.'.json',['class'=>get_class($e),'message'=>$e->getMessage(),'original_saved_and_sent'=>true]);}
 if($role==='ai')$http->end($response);
}catch(Throwable $e){pp_event(['event'=>'worker-stopped','phase'=>$phase,'class'=>get_class($e),'message'=>$e->getMessage(),'line'=>$e->getLine()]);http_response_code(500);header('Content-Type: application/json');echo pp_json(['harness_error'=>get_class($e),'message'=>$e->getMessage()]);}
