<?php

declare(strict_types=1);

// Read-only, independent-process cleanup evidence for one CDXPARMENU marker.
$marker=(string)getenv('CDXPARMENU_MARKER');
$pid=(string)getenv('POC_RUNTIME_PID');
if (!preg_match('/^CDXPARMENU[A-F0-9]{8}$/',$marker)
    || !ctype_digit($pid)) {
    fwrite(STDERR,"Invalid approved marker/PID\n");
    exit(2);
}
try {
    $context=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],$context)) {
            $context[$pair[0]]=$pair[1];
        }
    }
    if ($context['POC_HOST']!=='127.0.0.1'
        || $context['POC_PORT']!=='5237'
        || strtoupper($context['POC_SCHEMA'])!=='ZHCT_APP'
        || strtoupper($context['POC_USER'])!=='ZHCT_APP'
        || $context['POC_PASSWORD']==='') {
        throw new RuntimeException('Unexpected DM target');
    }
    $db=new PDO('dm:host=127.0.0.1;port=5237;schema=ZHCT_APP',
        $context['POC_USER'],$context['POC_PASSWORD'],[
            PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES=>false,
            PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,
        ]);
    if (strtoupper((string)$db->query(
        "SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL")
        ->fetchColumn())!=='ZHCT_APP') {
        throw new RuntimeException('Unexpected current schema');
    }
    $queries=[
        '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 ($queries as $key=>$sql) {
        $stmt=$db->prepare($sql);
        $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);
}
