<?php
declare(strict_types=1);require __DIR__.'/app.php';require __DIR__.'/data.php';ck(!file_exists($runtime.'/preflight-read.json'),'Fresh preflight once');$app=coreApp('PREFLIGHT');$columns=file_exists($runtime.'/columns-stage.json')?json_decode(file_get_contents($runtime.'/columns-stage.json'),true):[];
if(!$columns)foreach(['AI'=>['user_points_log','order_refund','sign','sign_user','user_weight'],'ZHCT'=>['measurement_session','measurement_session_raw','health_record']] as $db=>$tables){$ident=readNative($db,$dm?"SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') schema_name FROM DUAL":'SELECT DATABASE() schema_name,VERSION() version');ck($ident[0]['schema_name']===getenv('POC_'.$db.'_SCHEMA'),'Approved live target');if(!$dm)ck(strpos($ident[0]['version'],'5.6.')===0,'MySQL5.6');foreach($tables as $t){$name=($db==='AI'?'yoshop_':'ydy_').$t;$columns[$db][$t]=readNative($db,$dm?'SELECT COLUMN_NAME,DATA_TYPE,NULLABLE,DATA_DEFAULT,DATA_LENGTH,DATA_PRECISION,DATA_SCALE FROM USER_TAB_COLUMNS WHERE TABLE_NAME=? ORDER BY COLUMN_ID':'SELECT COLUMN_NAME,DATA_TYPE,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE,EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY ORDINAL_POSITION',[$dm?strtoupper($name):$name]);}}
$data=sourceData();$protect=protection();$plan=json_decode(file_get_contents(__DIR__.'/machine-plan.json'),true);$cases=[];$sign=0;foreach($data['sign'] as $r)if((int)$r['is_delete']===0)$sign=(int)$r['action_id'];$ykb='2026-10-11';foreach($data['measurement_session'] as $r)if((int)$r['is_valid']===1&&$r['vendor']==='yunkangbao'&&$r['device_type']==='body_scale'){$ykb=substr($r['start_time'],0,10);break;}
foreach($plan['cases'] as $c){if($c['label']==='SIGN')$c['params']['signId']=(string)$sign;if($c['label']==='YKB_DATE')$c['params']['date']=$ykb;$c['query_raw']=http_build_query($c['params'],'','&',PHP_QUERY_RFC3986);$cases[$c['label']]=$c;}
saveOnce('cases.json',$cases);saveOnce('preflight-read.json',['lane'=>$lane,'actor'=>actorId(),'columns'=>$columns,'source_data'=>$data,'protection'=>$protect,'source'=>sourceProof(),'date_now'=>date('Y-m-d'),'HTTP'=>0,'DML'=>0,'at'=>date('c')]);echo json_encode(['lane'=>$lane,'actor'=>actorId(),'source_data_counts'=>array_map('count',$data),'HTTP'=>0,'DML'=>0]),"\n";
