<?php

declare(strict_types=1);

// Read-only numeric column definitions, no business rows or secrets printed.
$pid=(string)getenv('POC_RUNTIME_PID');
if (!ctype_digit($pid)) {
    fwrite(STDERR,"Approved C 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');
    }
    $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,
        ]);
    $wanted=[
        'WEIGHT','PRICE','ENERGY','CARBOHYDRATE','PROTEIN','FAT',
        'DIETARY_FIBER','SFA','MUFA','PUFA','CHOLESTEROL','VA',
        'RENIERATENE','RETINOL','VB1','VB2','VPP','VC','VE','FOLIC_ACID',
        'BIOTIN','PANTOTHENIC_ACID','CHOLINE','POTASSIUM','SODIUM',
        'CALCIUM','MAGNESIUM','IRON','ZINC','SELENIUM','GI','GL',
        'PURINE','MOISTURE','ASH','IODINE','PHOSPHORUS','CUPRUM',
        'MANGANESE','SPICY_LEVEL','SSB','SACCHARIDES',
    ];
    $in=implode(',',array_fill(0,count($wanted),'?'));
    $sql='SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_PRECISION,'
        .'DATA_SCALE,NULLABLE FROM USER_TAB_COLUMNS'
        .' WHERE TABLE_NAME IN (?,?) AND COLUMN_NAME IN ('.$in.')'
        .' ORDER BY TABLE_NAME,COLUMN_NAME';
    $stmt=$db->prepare($sql);
    $stmt->execute(array_merge(['YDY_DISHES','YDY_FOODS_COMPOSITION'],$wanted));
    $rows=$stmt->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode(['row_count'=>count($rows),'columns'=>$rows],
        JSON_UNESCAPED_SLASHES).PHP_EOL;
} catch (Throwable $error) {
    echo json_encode(['status'=>'error','class'=>get_class($error),
        'code'=>$error->getCode()]).PHP_EOL;
    exit(1);
}
