<?php
require_once __DIR__.'/common.php';
$mode=$argv[1]??'';
if($mode==='code-failed-marker'){
 $p=pp_input('fresh-plan.json');$s=array_values(array_filter($p['steps'],static function($s){return $s['label']==='collision.prepay';}))[0];$r=pp_read($s['db'],$s['SQL'],$s['binds'],'failed-code-independent-marker');pp_need($r['rows']===[],'No new Prepay after failed route');pp_save('failed-code-marker0.json',['independent'=>$r,'failed_HTTP_preserved'=>true,'no_PrePay_business_write'=>true]);echo pp_json(['status'=>'FAILED_ROUTE_NEW_PREPAY0_PROVEN','side'=>getenv('PP_SIDE'),'budget'=>pp_saved('budget.json')])."\n";exit;
}
if($mode==='code-precondition'){
 pp_need(is_file(pp_private().'/equipment.json')&&!is_file(pp_private().'/send-attempt-code.json'),'Unique existing device, zero prior code attempt');pp_sources('store');pp_sources('ai');$p=pp_input('fresh-plan.json');$s=array_values(array_filter($p['steps'],static function($s){return $s['label']==='collision.prepay';}))[0];$r=pp_read($s['db'],$s['SQL'],$s['binds'],'immediate-precode-marker0');pp_need($r['rows']===[],'Exact new Prepay marker still0 before unique code');pp_save('immediate-precode-marker0.json',['original'=>$r,'equipment_ID'=>pp_saved('equipment.json')['id'],'source959_6169_all_same'=>true]);echo pp_json(['status'=>'PRECODE_SOURCE_OWNER_MARKER0','side'=>getenv('PP_SIDE'),'budget'=>pp_saved('budget.json')])."\n";exit;
}
if($mode==='workers-ready'){
 $out=[];foreach(['launch-store','launch-ai']as $k){$lease=pp_saved('worker-'.$k.'.json');pp_need(in_array($lease['router'],[__DIR__.'/router.php',__DIR__.'/router-v2.php'],true),'Exact bounded own router');$cmd=(string)file_get_contents('/proc/'.$lease['pid'].'/cmdline');pp_need(strpos($cmd,$lease['router'])!==false&&strpos($cmd,'127.0.0.1:'.$lease['port'])!==false,'Exact recorded own worker command');$s=@fsockopen('127.0.0.1',$lease['port'],$a,$b,.5);pp_need(is_resource($s),'Own bound socket, no HTTP warmup');fclose($s);$out[$k]=$lease;}pp_save('workers.json',$out);echo pp_json(['status'=>'OWN_TWO_WORKERS_READY_NO_HTTP','side'=>getenv('PP_SIDE')])."\n";exit;
}
if($mode==='auth-existing'){
 require_once __DIR__.'/apps.php';
 putenv('PP_PHASE=auth');
 try{
  pp_need(!is_file(pp_private().'/auth-proven.json')&&!is_file(pp_private().'/send-attempt-code.json'),'Only unfinished real Auth, no HTTP replay');$old=pp_saved('token.json');pp_need(time()-$old['created_at']<295,'Existing original single token still withinTTL300; never remint');$_SERVER['HTTP_HOST']='prepay.code-scan.invalid';$_SERVER['HTTP_PLATFORM']='POC';$app=pp_ai();require_once pp_base().'/source/ai/app/api/common.php';$user=\app\api\model\User::getUserByToken($old['token']);pp_need($user&&(int)$user['user_id']===pp_input('baseline.json')['ids']['AI_U1']&&(int)$user['store_id']===2147001111,'Actual original UserModel authorization identity/tenant');pp_save('auth-proven.json',['user_id'=>(int)$user['user_id'],'store_id'=>2147001111,'original_UserModel'=>true,'existing_single_token_unchanged'=>true,'included'=>pp_includes('ai')]);echo pp_json(['status'=>'EXISTING_ORIGINAL_AUTH_PROVEN','side'=>getenv('PP_SIDE'),'budget'=>pp_saved('budget.json')])."\n";exit;
 }catch(Throwable $e){pp_event(['event'=>'auth-resume-stopped','class'=>get_class($e),'message'=>$e->getMessage()]);fwrite(STDERR,$e->getMessage()."\n");exit(1);}
}
if($mode==='equipment-existing'){
 pp_need(!is_file(pp_private().'/equipment.json'),'Never overwrite equipment proof');$rec=null;$h=fopen(pp_private().'/events.jsonl','r');while(($l=fgets($h))!==false){$e=json_decode($l,true);if(($e['event']??'')==='observer-result'&&($e['label']??'')==='equipment-generated-full31')$rec=$e;}fclose($h);pp_need(is_array($rec)&&count($rec['rows'])===1,'Original successful full31 native read exists');$row=$rec['rows'][0];$machine=json_decode(file_get_contents(pp_base().'/machine-plan.json'),true)['equipment'][getenv('PP_SIDE')];$columns=pp_input('fresh-records.json')['schema.columns']['rows'];$cols=[];foreach($columns as $c)if(strtoupper($c['table_name'])==='YDY_EQUIPMENT')$cols[strtolower($c['column_name'])]=$c;pp_need(count($cols)===31&&count($row)===31,'Actual frozen complete31 columns');$names=['code','name','type','print_receipt','sn','restaurant_id','status','del_flag','mate_flag','hearttime','create_time','create_by','update_time','update_by'];$check=static function($n,$expected)use($row,$cols){$c=$cols[$n];$value=$row[$n];if(getenv('PP_SIDE')==='C'&&$c['data_type']==='DATETIME'&&(int)$c['data_scale']===6&&is_string($expected)&&preg_match('/^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d$/D',$expected))pp_need($value===$expected.'.000000','Exact source19 bind into actual DATETIME6 zero fraction '.$n);else pp_need($expected===null?$value===null:((string)$value===(string)$expected||(is_numeric($value)&&is_numeric($expected)&&(float)$value===(float)$expected)),'Exact approved physical device '.$n);};foreach($names as $i=>$n)$check($n,$machine['binds'][$i]);$n=0;foreach($cols as $k=>$c)if($k!=='id'&&!in_array($k,$names,true)){$d=$c[getenv('PP_SIDE')==='C'?'data_default':'column_default'];if(getenv('PP_SIDE')==='C'&&is_string($d)){$d=trim($d);if(strtoupper($d)==='NULL')$d=null;elseif($d[0]==="'"&&substr($d,-1)==="'")$d=str_replace("''","'",substr($d,1,-1));}$check($k,$d);$n++;}pp_need($n===16&&(int)$row['id']===pp_saved('prepare-result.json')['generated_ID'],'Original generatedID plus16 defaults');pp_save('equipment.json',['id'=>(int)$row['id'],'full'=>$rec,'offline_resume_of_original_full31'=>true,'no_SQL_replay'=>true]);echo pp_json(['status'=>'ORIGINAL_DEVICE_FULL31_PROVEN_OFFLINE','side'=>getenv('PP_SIDE'),'id'=>(int)$row['id'],'SQL'=>0])."\n";exit;
}
if($mode==='auth'){
 require_once __DIR__.'/apps.php';putenv('PP_PHASE=auth');
 pp_need(is_file(pp_private().'/equipment.json')&&is_file(pp_private().'/workers.json')&&!is_file(pp_private().'/auth-attempt.json'),'Only one new token after ready');$_SERVER['HTTP_HOST']='prepay.code-scan.invalid';$_SERVER['HTTP_PLATFORM']='POC';$app=pp_ai();require_once pp_base().'/source/ai/app/api/common.php';$id=pp_input('baseline.json')['ids']['AI_U1'];$token='CDXPPFORM11_'.getenv('PP_SIDE').'_'.bin2hex(random_bytes(24));$profile=['user'=>['user_id'=>$id],'password_version'=>0,'login_type'=>'thirdparty'];pp_save('auth-attempt.json',['token_sha256'=>hash('sha256',$token),'TTL'=>300,'at'=>time()]);pp_need($app->cache->set($token,$profile,300),'Original own FileCache');$file=$app->cache->store('file')->getCacheKey($token);pp_need(strpos($file,pp_private().'/ai-cache/')===0&&is_file($file),'Exact own FileCache file');pp_save('token.json',['token'=>$token,'profile'=>$profile,'TTL'=>300,'cache_file'=>$file,'created_at'=>time(),'original_file_sha256'=>hash_file('sha256',$file)]);$user=\app\api\model\User::getUserByToken($token);pp_need($user&&(int)$user['user_id']===$id&&(int)$user['store_id']===2147001111,'Actual original UserModel user/tenant');pp_save('auth-proven.json',['user_id'=>$id,'store_id'=>2147001111,'original_UserModel'=>true,'included'=>pp_includes('ai')]);echo pp_json(['status'=>'ORIGINAL_AUTH_PROVEN','side'=>getenv('PP_SIDE'),'budget'=>pp_saved('budget.json')])."\n";exit;
}
require __DIR__.'/run.php';
