<?php
declare(strict_types=1);
$dm=getenv('POC_DIALECT')==='dm';$lane=(string)getenv('META_LANE');
try{$pdo=new PDO($dm?'dm:host=127.0.0.1;port=5238;schema=AIZHCT_APP':'mysql:host='.getenv('POC_AI_HOST').';port='.getenv('POC_AI_PORT').';dbname='.getenv('POC_AI_SCHEMA').';charset=utf8',getenv('POC_AI_USER'),getenv('POC_AI_PASSWORD'),[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_CASE=>PDO::CASE_LOWER]);}catch(Throwable $e){throw new RuntimeException('Address metadata connection failed');}
if($dm){if($pdo->query("SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL")->fetchColumn()!=='AIZHCT_APP')throw new RuntimeException('DM identity');}elseif(strpos((string)$pdo->query('SELECT VERSION()')->fetchColumn(),'5.6.')!==0||$pdo->query('SELECT DATABASE()')->fetchColumn()!==getenv('POC_AI_SCHEMA'))throw new RuntimeException('Local MySQL identity');
$q=static function(string $sql,array $args=[])use($pdo):array{$s=$pdo->prepare($sql);$s->execute($args);$rows=$s->fetchAll(PDO::FETCH_ASSOC);foreach($rows as &$r)foreach($r as &$v)if(is_resource($v))$v=stream_get_contents($v);unset($r,$v);return $rows;};
$columns=$dm?$q("SELECT COLUMN_NAME,DATA_TYPE,NULLABLE,DATA_DEFAULT,DATA_LENGTH,DATA_PRECISION,DATA_SCALE FROM USER_TAB_COLUMNS WHERE TABLE_NAME='YOSHOP_STORE_ADDRESS' ORDER BY COLUMN_ID"):
    $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='yoshop_store_address' ORDER BY ORDINAL_POSITION");
$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='YOSHOP_STORE_ADDRESS' ORDER BY i.INDEX_NAME,c.COLUMN_POSITION"):
    $q("SELECT INDEX_NAME,NON_UNIQUE,COLUMN_NAME,SEQ_IN_INDEX FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='yoshop_store_address' ORDER BY INDEX_NAME,SEQ_IN_INDEX");
$triggers=(int)($dm?$q("SELECT COUNT(*) n FROM USER_TRIGGERS WHERE TABLE_NAME='YOSHOP_STORE_ADDRESS'"):$q("SELECT COUNT(*) n FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE='yoshop_store_address'"))[0]['n'];
$fks=(int)($dm?$q("SELECT COUNT(*) n FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='R' AND (TABLE_NAME='YOSHOP_STORE_ADDRESS' OR R_CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='YOSHOP_STORE_ADDRESS'))"):
    $q("SELECT COUNT(*) n FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND (TABLE_NAME='yoshop_store_address' OR REFERENCED_TABLE_NAME='yoshop_store_address')"))[0]['n'];
$chains=$q('SELECT '.($dm?'TOP 3 ':'').'p.id province_id,c.id city_id,r.id region_id,p.name province,c.name city,r.name region FROM yoshop_region p JOIN yoshop_region c ON c.pid=p.id AND c.level=2 JOIN yoshop_region r ON r.pid=c.id AND r.level=3 WHERE p.level=1 ORDER BY p.id,c.id,r.id'.($dm?'':' LIMIT 3'));
foreach($chains as &$row)foreach(['province_id','city_id','region_id'] as $key)$row[$key]=(int)$row[$key];unset($row);
$out=['lane'=>$lane,'read_only'=>true,'business_dml'=>0,'foreign_keys'=>$fks,'triggers'=>$triggers,'columns'=>$columns,'indexes'=>$indexes,
    'natural_address_rows'=>(int)$q('SELECT COUNT(*) n FROM yoshop_store_address')[0]['n'],
    'synthetic_collision_rows'=>(int)$q('SELECT COUNT(*) n FROM yoshop_store_address WHERE store_id IN (2147000821,2147000822)')[0]['n'],
    'readonly_region_rows'=>(int)$q('SELECT COUNT(*) n FROM yoshop_region')[0]['n'],'readonly_region_chains'=>$chains];
echo json_encode($out,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE),"\n";exit($fks!==0||$triggers!==0||!$columns||count($chains)<3?1:0);
