<?php
declare(strict_types=1);require __DIR__.'/native.php';require __DIR__.'/CoreGate.php';require __DIR__.'/data.php';require __DIR__.'/dto.php';CoreGate::$scenario='W1_MANUAL';CoreGate::$started=time();$n=0;$tests=[];$check=static function($name,$allowed,$fn)use(&$n,&$tests){$pass=true;try{$fn();}catch(Throwable $e){$pass=false;}$tests[$name]=$pass===$allowed;ck($tests[$name],$name);$n++;};$u=actor()['user_id'];$fields=['user_id'=>$u,'store_id'=>10001,'date'=>1791648000,'weight'=>'72.34','height'=>181.25,'bmi'=>22.02,'create_time'=>time(),'update_time'=>time()];$bind=[];foreach($fields as $k=>$v)$bind[$k]=[$v,in_array($k,['user_id','store_id','date','create_time','update_time'],true)?1:2];$sql='INSERT INTO yoshop_user_weight ('.implode(',',array_keys($fields)).') VALUES (:'.implode(',:',array_keys($fields)).')';$check('exact_manual_literal',true,static function()use($sql,$bind){CoreGate::plan('AI',$sql,$bind);});$bad=$bind;$bad['user_id'][0]=$u+1;$check('foreign_actor_insert_reject',false,static function()use($sql,$bad){CoreGate::plan('AI',$sql,$bad);});$bad=$bind;$bad['weight'][0]=72.34;$check('string_input_type_reject',false,static function()use($sql,$bad){CoreGate::plan('AI',$sql,$bad);});foreach(['DELETE FROM yoshop_user WHERE user_id=1','CREATE TABLE x(a int)','SELECT * FROM yoshop_order WHERE user_id=:u'] as $i=>$q)$check('unknown_or_destructive_'.$i,false,static function()use($q,$u){CoreGate::plan('AI',$q,['u'=>[$u,1]]);});$check('actual_metadata',true,static function(){CoreGate::plan('AI',CoreGate::COLUMNS,['p'=>['YOSHOP_USER_WEIGHT_STATUS',2]]);});$check('unknown_metadata',false,static function(){CoreGate::plan('AI',CoreGate::COLUMNS,['p'=>['YOSHOP_NONEXISTENT',2]]);});$check('empty_metadata',false,static function(){CoreGate::plan('AI',CoreGate::COLUMNS,['p'=>['',2]]);});CoreGate::$meta=true;$check('foreignschema_metadata',false,static function(){CoreGate::plan('AI','CALL SP_TABLEDEF(?, ?)',['x'=>['OTHER',2],'y'=>['YOSHOP_USER',2]]);});$base=baseline();ck($base['mobile']==='00000009992'&&$base['hide_mobile']==='000****9992'&&!isset($base['gender_txt'])&&$base['balance']==='0.00','Independent whole physical baseline');saveOnce('pure-gate-result.json',['checks'=>$n+1,'all_passed'=>true,'SQL'=>0,'HTTP'=>0,'DML'=>0,'tests'=>$tests,'baseline_user_info'=>$base,'literal_W1_expected'=>expectDTO('W1_MANUAL',[],time()),'literal_W2_expected'=>expectDTO('W2_GOAL',[],time())]);echo json_encode(['lane'=>$lane,'checks'=>$n+1,'SQL'=>0,'HTTP'=>0,'DML'=>0]),"\n";
