<?php
require __DIR__.'/db.php';
$journal=[];$originalQ=$q;$q=static function($sql,$args=[])use($originalQ,&$journal){$rows=$originalQ($sql,$args);$journal[]=['sql'=>$sql,'params'=>$args,'rows'=>count($rows)];return $rows;};
$report=['lane'=>$lane,'HTTP'=>0,'DML'=>0,'DDL'=>0];
try{
 foreach(['nutrition','nutrition_set','nutrition_time','nutrition_category'] as $t){
  $table=$p.$t;
  $report['metadata'][$t]=$lane==='B'?$q('SELECT COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,EXTRA,COLUMN_KEY,CHARACTER_MAXIMUM_LENGTH,DATETIME_PRECISION FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY ORDINAL_POSITION',[$table]):$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($table)]);
  $report['counts'][$t]=(int)$q('SELECT COUNT(*) AS CNT FROM '.$table)[0]['cnt'];
  if($t==='nutrition'){
   $report['constraints']=$lane==='B'?$q('SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=?',[$table]):$q('SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME=?',[strtoupper($table)]);
   $report['keys']=$lane==='B'?$q('SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=?',[$table]):$q('SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME=?',[strtoupper($table)]);
   $report['triggers']=$lane==='B'?$q('SELECT * FROM information_schema.TRIGGERS WHERE EVENT_OBJECT_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE=?',[$table]):$q('SELECT * FROM USER_TRIGGERS WHERE TABLE_NAME=?',[strtoupper($table)]);
   if($lane==='C')$report['nutrition_table_DDL']=$q("SELECT DBMS_METADATA.GET_DDL('TABLE',?,'ZHCT_APP') AS DDL FROM DUAL",[strtoupper($table)]);
  }else{
   $check($report['counts'][$t]<=100,'Small dictionary cap');$save('private-'.$t.'-rows.json',$q('SELECT * FROM '.$table.' ORDER BY ID'));
  }
 }
 $where='IS_DEL=1 AND IS_OWN=1 AND STATUS=1';
 $report['natural_active_own_count']=(int)$q('SELECT COUNT(*) AS CNT FROM '.$p.'nutrition WHERE '.$where)[0]['cnt'];
 $report['empty_media_count']=(int)$q("SELECT COUNT(*) AS CNT FROM ".$p."nutrition WHERE ".$where." AND (IMG_PATH='' OR IMG_PATH IS NULL) AND (SOURCE_IMG_PATH='' OR SOURCE_IMG_PATH IS NULL) AND (APP_IMG='' OR APP_IMG IS NULL)")[0]['cnt'];
 $report['supplier_groups']=$q('SELECT SUPPLIER,COUNT(*) AS CNT FROM '.$p.'nutrition WHERE IS_DEL=1 AND STATUS=1 GROUP BY SUPPLIER');
 $samples=$q('SELECT * FROM '.$p.'nutrition WHERE '.$where.' ORDER BY ID LIMIT 3');
 foreach($samples as &$row){$name=$row['name'];$row['_name_keyword_count']=(int)$q('SELECT COUNT(*) AS CNT FROM '.$p.'nutrition WHERE '.$where.' AND (NAME LIKE ? OR SYNOPSIS LIKE ?)',['%'.$name.'%','%'.$name.'%'])[0]['cnt'];$row['_product_keyword_count']=(int)$q('SELECT COUNT(*) AS CNT FROM '.$p.'nutrition a JOIN '.$p.'nutrition_set b ON a.SET_UUID=b.UUID JOIN '.$p.'nutrition_category c ON a.NUTRITION_CATEGORY_UUID=c.UUID WHERE a.IS_DEL=1 AND a.IS_OWN=1 AND a.STATUS=1 AND (a.NAME LIKE ? OR a.SYNOPSIS LIKE ? OR a.FUNCTION LIKE ? OR a.BATCHING LIKE ? OR b.NAME LIKE ? OR c.NAME LIKE ?)',array_fill(0,6,'%'.$name.'%'))[0]['cnt'];}unset($row);
 $save('private-natural-samples.json',$samples);
 require __DIR__.'/init.php';$GLOBALS['CDX_PREPARED']=[];new \app\p\logic\Nutrition();new \app\m\logic\Nutrition();new \app\validate\Nutrition();new \app\model\NutritionStation();new \app\model\File();
 $report['constructor_SQL']=$GLOBALS['CDX_PREPARED'];$check($report['constructor_SQL']===[],'Complete target logic/model/File constructor0SQL');
 $report['passed']=true;
}catch(Throwable $e){$save('private-preflight-error.json',['class'=>get_class($e),'message'=>$e->getMessage()]);$report['failure']=['class'=>get_class($e),'reason_sha256'=>hash('sha256',$e->getMessage())];}
$save('private-preflight.json',$report);$save('private-query-journal.json',$journal);
$public=$report;unset($public['metadata'],$public['constraints'],$public['keys'],$public['triggers'],$public['nutrition_table_DDL'],$public['supplier_groups']);echo json_encode($public),"\n";exit(!empty($report['passed'])?0:2);
