<?php
require __DIR__.'/db.php';$report=['lane'=>$lane,'safe'=>false,'http_executions'=>0,'business_dml'=>0,'ddl'=>0,'effective_business_empty'=>$business==='','business_sha256'=>$hash($business)];
try{
 if($lane==='B')$check(strpos((string)$db->query('SELECT VERSION()')->fetchColumn(),'5.6.')===0,'MySQL5.6 identity');else $check($db->query("SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL")->fetchColumn()==='ZHCT_APP','DM identity');$report['identity_verified']=true;
 $actors=$q('SELECT ID,UUID,STAFF_UUID,ACCOUNT,TYPE,IS_DELETE FROM '.$p.'user WHERE ID=(SELECT MIN(ID) FROM '.$p.'user WHERE TYPE=0 AND IS_DELETE=0)');$check(count($actors)===1&&(int)$actors[0]['type']===0&&(int)$actors[0]['is_delete']===0&&!empty($actors[0]['uuid']),'Actual active actor');$save('private-actor.json',$actors[0]);$report['actor_sha256']=$hash($actors[0]);
 $table=$p.'agent_conversation_log';$columns=$lane==='B'?$q('SELECT COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,EXTRA,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_SCALE,NULLABLE,DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME=? ORDER BY COLUMN_ID',[strtoupper($table)]);$report['columns']=$columns;$check($columns!==[],'Required conversation table absent');$names=array_map(static function($r){return strtolower($r['column_name']);},$columns);$report['missing_columns']=array_values(array_diff(['id','business','user_name','current_route','question','answer','matched','source','create_time'],$names));$check($report['missing_columns']===[],'Required conversation columns absent');
 $report['indexes']=$lane==='B'?$q('SELECT INDEX_NAME,NON_UNIQUE,SEQ_IN_INDEX,COLUMN_NAME FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY INDEX_NAME,SEQ_IN_INDEX',[$table]):$q('SELECT I.INDEX_NAME,I.UNIQUENESS,C.COLUMN_POSITION,C.COLUMN_NAME FROM USER_INDEXES I JOIN USER_IND_COLUMNS C ON I.INDEX_NAME=C.INDEX_NAME WHERE I.TABLE_NAME=? ORDER BY I.INDEX_NAME,C.COLUMN_POSITION',[strtoupper($table)]);
 $report['business_total']=(int)$q('SELECT COUNT(*) AS CNT FROM '.$table.' WHERE BUSINESS=?',[$business])[0]['cnt'];$report['safe']=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);echo json_encode($report,JSON_UNESCAPED_UNICODE),"\n";exit($report['safe']?0:2);
