<?php

declare(strict_types=1);

set_exception_handler(static function (Throwable $error): void {
    fwrite(STDERR, 'N3_C_METADATA_FAILED ' . get_class($error) . PHP_EOL);
    exit(2);
});

$env = [];
foreach (explode("\0", (string)@file_get_contents('/proc/53772/environ')) as $item) {
    $parts = explode('=', $item, 2);
    if (count($parts) === 2) $env[$parts[0]] = $parts[1];
}
if (($env['POC_TARGET_ROOT'] ?? '') !== '/tmp/zhct-ai-http-20260929.3XDj3w'
    || ($env['POC_BASE_URL'] ?? '') !== 'http://127.0.0.1:18102'
    || ($env['POC_DIALECT'] ?? '') !== 'dm'
    || ($env['POC_AI_HOST'] ?? '') !== '127.0.0.1'
    || ($env['POC_AI_PORT'] ?? '') !== '5238'
    || ($env['POC_AI_SCHEMA'] ?? '') !== 'AIZHCT_APP'
    || ($env['POC_AI_USER'] ?? '') !== 'AIZHCT_APP') {
    throw new RuntimeException('Unapproved C AI boundary');
}
$db = new PDO('dm:host=127.0.0.1;port=5238;schema=AIZHCT_APP',
    $env['POC_AI_USER'], $env['POC_AI_PASSWORD'],
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_CASE => PDO::CASE_LOWER]);
if ((string)$db->query("SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL")
    ->fetchColumn() !== 'AIZHCT_APP') {
    throw new RuntimeException('C actual schema mismatch');
}
$stmt = $db->prepare('SELECT COLUMN_NAME,DATA_TYPE,DATA_PRECISION,DATA_SCALE,NULLABLE'
    . ' FROM USER_TAB_COLUMNS WHERE TABLE_NAME=? ORDER BY COLUMN_ID');
$stmt->execute(['YOSHOP_STAFF_WEIGHT']);
$columns = [];
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
    $name = strtolower((string)$row['column_name']);
    if (preg_match('/DECIMAL|NUMERIC|DOUBLE|FLOAT|INTEGER|BIGINT|SMALLINT|TINYINT/i',
            (string)$row['data_type'])
        || in_array($name, ['height', 'weight', 'body_fat_rate', 'bmi'], true)) {
        $columns[$name] = [
            'type' => (string)$row['data_type'],
            'precision' => $row['data_precision'] === null ? null : (int)$row['data_precision'],
            'scale' => $row['data_scale'] === null ? null : (int)$row['data_scale'],
            'nullable' => (string)$row['nullable'],
        ];
    }
}
$casts = [];
foreach (['whole' => '60.00', 'fractional' => '60.25'] as $label => $literal) {
    $value = $db->query('SELECT CAST(' . $literal
        . ' AS DECIMAL(5,2)) FROM DUAL')->fetchColumn();
    $casts[$label] = [
        'php_type' => gettype($value),
        'fixed_2_decimal_string' => is_string($value)
            && preg_match('/^-?[0-9]+\.[0-9]{2}$/D', $value) === 1,
    ];
}
echo json_encode(['table' => 'YOSHOP_STAFF_WEIGHT',
    'numeric_like_columns' => $columns, 'synthetic_decimal_cast' => $casts],
    JSON_UNESCAPED_SLASHES) . PHP_EOL;
