<?php

declare(strict_types=1);

$parentPid = 53772;
$parentRoot = '/tmp/zhct-ai-http-20260929.3XDj3w';
$root = '/tmp/cdx-prepay-code-scan-20261012-C-ai';
$port = 19134;
if (strpos((string)file_get_contents('/proc/' . $parentPid . '/cmdline'), $parentRoot . '/public') === false
    || !is_file($root . '/app/api/service/PrepayOrder.php')
    || !is_file($root . '/vendor/autoload.php')
    || is_file($root . '/private-http.pid')) {
    throw new RuntimeException('Original AI process or private source unavailable');
}
$allow = ['PATH', 'LANG', 'LC_ALL', 'LC_CTYPE', 'TZ', 'NLS_LANG', 'DM_CHARSET',
    'DM_SVC_PATH', 'DM_HOME', 'LD_LIBRARY_PATH', 'POC_HOST', 'POC_PORT',
    'POC_SCHEMA', 'POC_USER', 'POC_PASSWORD', 'POC_AI_HOST', 'POC_AI_PORT',
    'POC_AI_SCHEMA', 'POC_AI_USER', 'POC_AI_PASSWORD', 'POC_DIALECT',
    'POC_MYSQL_UTF8MB4'];
$env = [];
foreach (explode("\0", (string)file_get_contents('/proc/' . $parentPid . '/environ')) as $pair) {
    $parts = explode('=', $pair, 2);
    if (count($parts) === 2 && in_array($parts[0], $allow, true)) $env[$parts[0]] = $parts[1];
}
foreach (['POC_HOST', 'POC_PORT', 'POC_SCHEMA', 'POC_USER', 'POC_PASSWORD',
    'POC_AI_HOST', 'POC_AI_PORT', 'POC_AI_SCHEMA', 'POC_AI_USER', 'POC_AI_PASSWORD'] as $key) {
    if (!isset($env[$key]) || $env[$key] === '') throw new RuntimeException('AI isolated DB env incomplete');
}
if (($env['POC_DIALECT'] ?? '') !== 'dm') throw new RuntimeException('Not DM runtime');
$env['POC_EXTERNAL_STUBS'] = '1';
$env['POC_REAL_QUEUE'] = '0';
$env['POC_APP_ROOT'] = $root;
$env['POC_BASE_URL'] = 'http://127.0.0.1:' . $port;
$args = ['/www/server/php/74/bin/php', '-c', '/www/server/php/74/etc/php-cli.ini',
    '-d', 'extension=/home/dmdba/dmdbms/drivers/php_pdo/libphp74_dm.so',
    '-d', 'extension=/home/dmdba/dmdbms/drivers/php_pdo/php74_pdo_dm.so',
    '-d', 'display_errors=0', '-d', 'log_errors=1', '-S', '127.0.0.1:' . $port,
    '-t', $root . '/public', $root . '/public/index.php'];
$cmd = 'nohup ' . implode(' ', array_map('escapeshellarg', $args))
    . ' </dev/null >' . escapeshellarg($root . '/private-http.log') . ' 2>&1 & echo $!';
$process = proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['pipe', 'w']], $pipes, null, $env);
if (!is_resource($process)) throw new RuntimeException('Could not launch private AI');
$pid = (int)trim(stream_get_contents($pipes[1]));
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
if ($pid <= 1) throw new RuntimeException('Private AI PID unavailable');
file_put_contents($root . '/private-http.pid', (string)$pid, LOCK_EX);
chmod($root . '/private-http.pid', 0600);
echo json_encode(['lane' => 'C', 'port' => $port, 'private_pid' => $pid,
    'source' => 'current app/cores/route overlay']) . PHP_EOL;
