<?php

declare(strict_types=1);

$lane=(string)getenv('CDX_DMT_RECOVER_LANE');$journal=(string)getenv('CDX_DMT_RECOVER_JOURNAL');
if(!in_array($lane,['B','C'],true)||(string)getenv('CDX_DMT_RECOVER_APPROVE')!=='ROOT_EXACT_RECOVERY_V1'
    ||!preg_match('~^/tmp/cdx-dmt-[a-f0-9]{12}/recovery\.json$~D',$journal)||!is_file($journal)){
    echo json_encode(['status'=>'default_deny','dml'=>false]),PHP_EOL;exit(78);}
$saved=json_decode((string)file_get_contents($journal),true);if(!is_array($saved)||($saved['lane']??null)!==$lane
    ||!in_array((string)($saved['phase']??''),['unexpected_reference_retain_fixture','cleanup_failed'],true))throw new RuntimeException('Journal ownership invalid');
$root=$lane==='B'?'/tmp/zhct-http-store-mysql.dQTTBP':'/tmp/zhct-dm-poc-20260928.fcpiiN/store';$dialect=$lane==='B'?'mysql':'dm';$config=require $root.'/application/database.php';
$dsn=$dialect==='mysql'?'mysql:host='.$config['hostname'].';port='.(int)($config['hostport']??3306).';dbname='.$config['database'].';charset='.(string)($config['charset']??'utf8'):'dm:host=127.0.0.1;port=5237;schema=ZHCT_APP';
$db=new PDO($dsn,(string)$config['username'],(string)$config['password'],[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_CASE=>PDO::CASE_LOWER]);$p=$dialect==='dm'?'YDY_':'ydy_';
$count=static function(PDO$db,string$sql,array$args=[]):int{$q=$db->prepare($sql);$q->execute($args);return(int)$q->fetchColumn();};
$recordCount=$count($db,'SELECT COUNT(*) FROM '.$p.'menu_recommend_record WHERE STAFF_UUID=? AND MENU_RECOMMEND_UUID=?',[$saved['staff_uuid'],$saved['recommend_uuid']]);
if($recordCount!==1)throw new RuntimeException('Owned record count mismatch');
$db->beginTransaction();try{$delete=static function(PDO$db,string$sql,array$args,int$expected):void{$q=$db->prepare($sql);$q->execute($args);if($q->rowCount()!==$expected)throw new RuntimeException('Recovery delete mismatch');};
    $delete($db,'DELETE FROM '.$p.'menu_recommend_record WHERE STAFF_UUID=? AND MENU_RECOMMEND_UUID=?',[$saved['staff_uuid'],$saved['recommend_uuid']],1);
    $delete($db,'DELETE FROM '.$p.'menu_recommend WHERE ID=? AND UUID=? AND STAFF_UUID=?',[(int)$saved['recommend_id'],$saved['recommend_uuid'],$saved['staff_uuid']],1);
    $delete($db,'DELETE FROM '.$p.'staff WHERE ID=? AND UUID=? AND CREATE_BY=?',[(int)$saved['staff_id'],$saved['staff_uuid'],$saved['marker']],1);
    $delete($db,'DELETE FROM '.$p.'user WHERE ID=? AND UUID=? AND ACCOUNT=? AND TYPE=0 AND CREATE_BY=?',[(int)$saved['actor_id'],$saved['actor_uuid'],$saved['marker'],$saved['marker']],1);$db->commit();
}catch(Throwable$e){if($db->inTransaction())$db->rollBack();throw$e;}
if($count($db,'SELECT COUNT(*) FROM '.$p."user WHERE ACCOUNT LIKE 'CDXDMT%' OR UUID LIKE 'CDXDMT%'")
    +$count($db,'SELECT COUNT(*) FROM '.$p."staff WHERE UUID LIKE 'CDXDMT%' OR CREATE_BY LIKE 'CDXDMT%'")
    +$count($db,'SELECT COUNT(*) FROM '.$p."menu_recommend WHERE UUID LIKE 'CDXDMT%' OR STAFF_UUID LIKE 'CDXDMT%'")!==0)throw new RuntimeException('Marker remains');
if($count($db,'SELECT COUNT(*) FROM '.$p.'menu_recommend_record WHERE STAFF_UUID=?',[$saved['staff_uuid']])!==0)throw new RuntimeException('Record remains');
unlink($journal);rmdir(dirname($journal));echo json_encode(['status'=>'exact_recovery_pass','lane'=>$lane,'deleted'=>['record'=>1,'recommend'=>1,'staff'=>1,'actor'=>1],'marker_rows'=>0,'staff_references'=>0,'journal_removed'=>true]),PHP_EOL;
