<?php

declare(strict_types=1);

// Independent read-only cleanup check for one synthetic permission marker.
$marker=(string)getenv('CDXPARCFRO_MARKER');
$pid=(string)getenv('POC_RUNTIME_PID');
if (!preg_match('/^CDXPARCFRO[A-F0-9]{8}$/',$marker)
    || !ctype_digit($pid)) {
    fwrite(STDERR,"Approved marker/PID required\n");
    exit(2);
}
try {
    $cmdline=(string)file_get_contents('/proc/'.$pid.'/cmdline');
    if (strpos($cmdline,'127.0.0.1:18080')===false
        || strpos($cmdline,
            '/tmp/zhct-dm-poc-20260928.fcpiiN/store/public')===false) {
        throw new RuntimeException('Unexpected C runtime');
    }
    $env=array_fill_keys(['POC_HOST','POC_PORT','POC_SCHEMA',
        'POC_USER','POC_PASSWORD'],'');
    foreach (explode("\0",(string)file_get_contents('/proc/'.$pid.'/environ')) as $entry) {
        $pair=explode('=',$entry,2);
        if (count($pair)===2 && array_key_exists($pair[0],$env)) {
            $env[$pair[0]]=$pair[1];
        }
    }
    if ($env['POC_HOST']!=='127.0.0.1' || $env['POC_PORT']!=='5237'
        || strtoupper($env['POC_SCHEMA'])!=='ZHCT_APP'
        || strtoupper($env['POC_USER'])!=='ZHCT_APP'
        || $env['POC_PASSWORD']==='') {
        throw new RuntimeException('Unexpected C DB target');
    }
    $db=new PDO('dm:host=127.0.0.1;port=5237;schema=ZHCT_APP',
        $env['POC_USER'],$env['POC_PASSWORD'],[
            PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,
        ]);
    $sql=[
        'user'=>'SELECT COUNT(*) FROM YDY_USER WHERE ACCOUNT=?',
        'role'=>'SELECT COUNT(*) FROM YDY_ROLE WHERE NAME=?',
        'user_role'=>'SELECT COUNT(*) FROM YDY_USER_ROLE WHERE CREATE_BY=?',
        'role_menu'=>'SELECT COUNT(*) FROM YDY_ROLE_MENU WHERE CREATE_BY=?',
    ];
    $counts=[];
    foreach ($sql as $key=>$query) {
        $stmt=$db->prepare($query);
        $stmt->execute([$marker]);
        $counts[$key]=(int)$stmt->fetchColumn();
    }
    echo json_encode(['marker'=>$marker,'counts'=>$counts],
        JSON_UNESCAPED_SLASHES).PHP_EOL;
    if (array_sum($counts)!==0) exit(1);
} catch (Throwable $error) {
    echo json_encode(['status'=>'error','class'=>get_class($error),
        'code'=>$error->getCode()]).PHP_EOL;
    exit(1);
}
