<?php
declare(strict_types=1);require __DIR__.'/db.php';
$out=['lane'=>$lane,'identity_verified'=>true,'business_dml'=>0,'tables'=>[]];
foreach(['sign_action','sign_address','upload_file','wxapp_setting','store_setting','sign','sign_user'] as $name){$table='yoshop_'.$name;$upper=strtoupper($table);$cols=$dm?$q("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",[$upper]):$q('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',[$table]);foreach($cols as &$c)$c['column_name']=strtolower($c['column_name']);unset($c);
$fk=$dm?$q("SELECT COUNT(*) n FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='R' AND (TABLE_NAME=? OR R_CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME=?))",[$upper,$upper]):$q('SELECT COUNT(*) n FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND (TABLE_NAME=? OR REFERENCED_TABLE_NAME=?)',[$table,$table]);
$tr=$dm?$q('SELECT COUNT(*) n FROM USER_TRIGGERS WHERE TABLE_NAME=?',[$upper]):$q('SELECT COUNT(*) n FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE=?',[$table]);
$out['tables'][$name]=['columns'=>$cols,'foreign_keys'=>(int)$fk[0]['n'],'triggers'=>(int)$tr[0]['n']];if($cols){$out['tables'][$name]['natural_rows']=(int)$q('SELECT COUNT(*) n FROM '.$table)[0]['n'];if(in_array('store_id',array_column($cols,'column_name'),true))$out['tables'][$name]['own_collision']=(int)$q('SELECT COUNT(*) n FROM '.$table.' WHERE store_id IN (2147001571,2147001572)')[0]['n'];}
}
$vcol=$dm?'"VALUES"':'`values`';$kcol=$dm?'"KEY"':'`key`';$storage=$q('SELECT '.$vcol.' v FROM yoshop_store_setting WHERE store_id=0 AND '.$kcol.'=?',['storage']);$out['global_storage_default']=count($storage)?(json_decode($storage[0]['v'],true)['default']??'UNKNOWN'):'default-local';
foreach(['sign_action','sign_address','upload_file'] as $name){$table='yoshop_'.$name;$out['tables'][$name]['indexes']=$dm?$q('SELECT i.INDEX_NAME,i.UNIQUENESS,c.COLUMN_NAME,c.COLUMN_POSITION 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)]):$q('SELECT INDEX_NAME,NON_UNIQUE,COLUMN_NAME,SEQ_IN_INDEX FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY INDEX_NAME,SEQ_IN_INDEX',[$table]);if($dm)$out['tables'][$name]['ddl']=$q("SELECT DBMS_METADATA.GET_DDL('TABLE',?,'AIZHCT_APP') ddl FROM DUAL",[strtoupper($table)]);}
file_put_contents(__DIR__.'/structure-'.$lane.'.json',json_encode($out,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES));echo json_encode(['lane'=>$lane,'business_dml'=>0,'tables'=>array_map(static function($t){return ['columns'=>array_column($t['columns'],'column_name'),'foreign_keys'=>$t['foreign_keys'],'triggers'=>$t['triggers'],'rows'=>$t['natural_rows']??null,'own_collision'=>$t['own_collision']??null];},$out['tables'])]),"\n";
