<?php
require __DIR__.'/common.php';
$check(!is_file(__DIR__.'/private-request.json'),'Prepare must not replay');
$report=['lane'=>$lane,'HTTP'=>0,'DML'=>0,'DDL'=>0];
if($lane==='C'){
 $before=json_decode(file_get_contents(__DIR__.'/private-preflight.json'),true);
 $check($before['passed']&&$before['tables']['nutrition_set']['total']===0&&$before['tables']['nutrition_time']['total']===0,'Original empty gate');
 foreach(['nutrition_set','nutrition_time'] as $t){
  $check((int)$q('SELECT COUNT(*) AS CNT FROM '.$p.$t)[0]['cnt']===0,'Fresh empty source '.$t);
  $columns=$q('SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION,DATA_SCALE,NULLABLE,DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME=? ORDER BY COLUMN_ID',[strtoupper($p.$t)]);
  $check($columns===$before['tables'][$t]['columns'],'Metadata unchanged '.$t);
  $triggers=$q('SELECT * FROM USER_TRIGGERS WHERE TABLE_NAME=?',[strtoupper($p.$t)]);$check($triggers===[],'Trigger0');
  $ddl=$q("SELECT DBMS_METADATA.GET_DDL('TABLE',?,'ZHCT_APP') AS DDL FROM DUAL",[strtoupper($p.$t)]);$check($ddl===$before['tables'][$t]['DDL'],'DDL/identity unchanged '.$t);
 }
 $fixtures=[
 'nutrition_time'=>['uuid'=>'8B198EC2-A4CD-4FC7-B748-4AA381116AB7','name'=>'CDXNR11F3C7-time','function'=>null,'order_no'=>1,'status'=>1,'del_flag'=>0,'create_time'=>'2001-01-01 01:01:01','create_by'=>'CDXNR11F3C7'],
 'nutrition_set'=>['uuid'=>'5160CDE0-D0F1-4935-BA5C-33192DB8A20A','name'=>'CDXNR11F3C7-set','number'=>0,'status'=>1,'is_del'=>1,'create_time'=>'2001-01-01 01:01:01','create_by'=>'CDXNR11F3C7','order_no'=>1,'use_time'=>'8B198EC2-A4CD-4FC7-B748-4AA381116AB7']];
 $journal=[];$db->beginTransaction();try{foreach($fixtures as $t=>$row){$check((int)$q('SELECT COUNT(*) AS CNT FROM '.$p.$t.' WHERE UUID=? OR NAME=?',[$row['uuid'],$row['name']])[0]['cnt']===0,'UUID/marker conflict0');$sql='INSERT INTO '.$p.$t.' ('.implode(',',array_map(static function($k){return '"'.strtoupper($k).'"';},array_keys($row))).') VALUES ('.implode(',',array_fill(0,count($row),'?')).')';$s=$db->prepare($sql);$values=array_values($row);foreach($values as $i=>$value)$s->bindValue($i+1,$value,$value===null?PDO::PARAM_NULL:(is_int($value)?PDO::PARAM_INT:PDO::PARAM_STR));$s->execute();$journal[]=['queryString'=>$s->queryString,'values'=>$values,'affected'=>$s->rowCount()];$check($s->rowCount()===1,'Exact insert1');}$db->commit();}catch(Throwable $e){if($db->inTransaction())$db->rollBack();throw $e;}
 $save('private-fixture-insert.json',$journal);$report['DML']=2;
}
$baseline=$source();$save('private-http-baseline.json',$baseline);
$setUUID=$lane==='B'?'077C7A9D-E877-CD81-F325-D34CE3D179BD':'5160CDE0-D0F1-4935-BA5C-33192DB8A20A';
$timeUUID=$lane==='B'?'FBF385F6-32DB-0767-1BF7-BEBA00BEDD9C':'8B198EC2-A4CD-4FC7-B748-4AA381116AB7';
$check(count(array_filter($baseline['sets'],static function($r)use($setUUID){return $r['uuid']===$setUUID;}))===1,'Local set UUID');$check(count(array_filter($baseline['times'],static function($r)use($timeUUID){return $r['uuid']===$timeUUID;}))===1,'Local time UUID');
require __DIR__.'/init.php';$GLOBALS['CDX_PREPARED']=[];new \app\p\logic\Nutrition();new \app\p\logic\NutritionTime();$check($GLOBALS['CDX_PREPARED']===[],'Constructor0SQL');
$actor=$q('SELECT ID,UUID,ACCOUNT,TYPE,IS_DELETE FROM '.$p.'user WHERE ID=?',[$actorId])[0];require_once APP_PATH.'base/Security.php';
$token=\app\base\Security::encrypt(implode("\t",[(string)$actor['id'],(string)$actor['uuid'],(string)$actor['account'],'0','','',(string)$actor['account']]));
$cases=[['label'=>'setLists','path'=>'/p/nutrition_set/lists','params'=>['page'=>'1','pagesize'=>'10','keyword'=>'']],['label'=>'setAll','path'=>'/p/nutrition_set/listsAllSet','params'=>['uuid'=>'']],['label'=>'timeLists','path'=>'/p/nutrition_time/lists','params'=>['page'=>'1','pagesize'=>'10','keyword'=>'']],['label'=>'setInfo','path'=>'/p/nutrition_set/info','params'=>['uuid'=>$setUUID]],['label'=>'timeInfo','path'=>'/p/nutrition_time/info','params'=>['uuid'=>$timeUUID]]];
$save('private-request.json',['token'=>$token,'cases'=>$cases]);$save('private-cases.json',$cases);
$lock=[];foreach(['p/controller/NutritionSet.php','p/controller/NutritionTime.php','p/logic/Nutrition.php','p/logic/NutritionTime.php','model/NutritionSet.php','model/NutritionTime.php','model/Nutrition.php','model/BaseModel.php','base/AdminController.php','common.php','route.php'] as $f)$lock[$f]=hash_file('sha256',APP_PATH.$f);$save('private-source-lock.json',$lock);
$report['passed']=true;$save('private-prepare.json',$report);echo json_encode($report),"\n";
