<?php
declare(strict_types=1);

// One approved post-stop read-only existence check. No DDL, DML or business rows.
set_exception_handler(static function (Throwable $error): void {
    echo json_encode(['status' => 'read-only-check-error',
        'class' => get_class($error), 'code' => (string)$error->getCode()],
        JSON_UNESCAPED_SLASHES), PHP_EOL;
    exit(2);
});
const EXACT_SYNTHETIC_TABLE = 'CDXODBC_20261001_CA7A9700';
$pid = 53772;
$private = '/tmp/zhct-pdo-odbc-00w7A4sc';
$raw = file_get_contents('/proc/' . $pid . '/environ');
if ($raw === false) throw new RuntimeException('Approved AI POC unavailable');
$env = [];
foreach (explode("\0", $raw) as $part) {
    if (strpos($part, 'POC_') !== 0) continue;
    $position = strpos($part, '=');
    if ($position !== false) $env[substr($part, 0, $position)] = substr($part, $position + 1);
}
if (($env['POC_DIALECT'] ?? '') !== 'dm'
    || ($env['POC_AI_HOST'] ?? '') !== '127.0.0.1'
    || ($env['POC_AI_PORT'] ?? '') !== '5238'
    || ($env['POC_AI_SCHEMA'] ?? '') !== 'AIZHCT_APP'
    || empty($env['POC_AI_USER']) || empty($env['POC_AI_PASSWORD'])
    || !preg_match('/^CDXODBC_[0-9]{8}_[A-F0-9]{8}$/D', EXACT_SYNTHETIC_TABLE)) {
    throw new RuntimeException('Read-only boundary mismatch');
}
putenv('ODBCSYSINI=' . $private . '/odbc-config');
putenv('ODBCINI=' . $private . '/odbc-config/odbc.ini');
putenv('ODBCINSTINI=odbcinst.ini');
$pdo = new PDO('odbc:CDX_PRIVATE_AI', $env['POC_AI_USER'],
    $env['POC_AI_PASSWORD'], [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$user = strtoupper((string)$pdo->query('SELECT USER FROM DUAL')->fetchColumn());
$schema = strtoupper((string)$pdo->query(
    "SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL"
)->fetchColumn());
if ($user !== 'AIZHCT_APP' || $schema !== 'AIZHCT_APP') {
    throw new RuntimeException('Read-only owner mismatch');
}
$statement = $pdo->prepare('SELECT COUNT(*) FROM USER_TABLES WHERE TABLE_NAME=?');
$statement->execute([EXACT_SYNTHETIC_TABLE]);
$count = (int)$statement->fetchColumn();
echo json_encode(['status' => 'exact-table-read-only-check',
    'table' => EXACT_SYNTHETIC_TABLE, 'user_and_schema_match' => true,
    'user_tables_count' => $count], JSON_UNESCAPED_SLASHES), PHP_EOL;
exit($count === 0 ? 0 : 3);
