<?php
declare(strict_types=1);
if(getenv('CITY_FIXTURE_APPROVAL')!=='CREATE_CITY_TEST_TREE_V1')exit(78);
$lane=getenv('CITY_LANE');$dm=$lane==='C';$cfg=require __DIR__.'/config.php';
$dsn=$dm?'dm:host=127.0.0.1;port=5237;schema=ZHCT_APP':'mysql:host='.$cfg['hostname'].';port='.($cfg['hostport']?:3306).';dbname='.$cfg['database'].';charset='.$cfg['charset'];
$db=new PDO($dsn,$cfg['username'],$cfg['password'],[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_CASE=>PDO::CASE_LOWER]);
$count=(int)$db->query('SELECT COUNT(*) FROM ydy_city')->fetchColumn();if($count!==0)throw new RuntimeException('Only verified empty development city table');
if($dm){
    $triggers=(int)$db->query("SELECT COUNT(*) FROM USER_TRIGGERS WHERE TABLE_NAME='YDY_CITY'")->fetchColumn();
    $foreign=(int)$db->query("SELECT COUNT(*) FROM USER_CONSTRAINTS WHERE TABLE_NAME='YDY_CITY' AND CONSTRAINT_TYPE='R'")->fetchColumn();
}else{
    $triggers=(int)$db->query("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE='ydy_city'")->fetchColumn();
    $foreign=(int)$db->query("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ydy_city' AND CONSTRAINT_TYPE='FOREIGN KEY'")->fetchColumn();
}
if($triggers||$foreign)throw new RuntimeException('Unexpected city side effect');
$db->beginTransaction();$owned=[];
try{
    foreach([['CDXCITY10测试根',0,1],['CDXCITY10测试市甲',1,2],['CDXCITY10测试市乙',1,2],['CDXCITY10测试区',2,3]] as $i=>$input){
        [$name,$parentIndex,$level]=$input;$pid=$parentIndex? $owned[$parentIndex-1]['id']:0;
        $s=$db->prepare('INSERT INTO ydy_city (name,pid,level) VALUES (?,?,?)');$s->execute([$name,$pid,$level]);
        $s=$db->prepare('SELECT id,name,pid,level FROM ydy_city WHERE name=?');$s->execute([$name]);$rows=$s->fetchAll(PDO::FETCH_ASSOC);
        if(count($rows)!==1||(int)$rows[0]['id']<=0||(int)$rows[0]['pid']!==$pid||(int)$rows[0]['level']!==$level)throw new RuntimeException('Owned city fixture readback failed');
        $owned[]=['id'=>(int)$rows[0]['id'],'name'=>$name,'pid'=>$pid,'level'=>$level];
    }
    $db->commit();
}catch(Throwable $e){if($db->inTransaction())$db->rollBack();throw $e;}
file_put_contents(__DIR__.'/city-owned.json',json_encode(['lane'=>$lane,'natural_rows_before'=>0,'fixtures_retained'=>4,'rows'=>$owned],JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE));
echo json_encode(['lane'=>$lane,'owned_marked_city_rows_retained'=>4,'natural_rows_before'=>0,'fixture_inserts'=>4,'http_sent'=>false]),"\n";
