<?php

declare(strict_types=1);

$root = (string)getenv('POC_APP_ROOT');
$dialect = (string)getenv('POC_DIALECT');
if (!is_file($root . '/application/database.php') || !in_array($dialect, ['mysql', 'dm'], true)) exit(2);
$config = require $root . '/application/database.php';
$dsn = $dialect === 'dm'
    ? 'dm:host=' . $config['hostname'] . ';port=' . $config['hostport'] . ';schema=' . $config['database']
    : 'mysql:host=' . $config['hostname'] . ';port=' . $config['hostport'] . ';dbname=' . $config['database'] . ';charset=utf8mb4';
$pdo = new PDO($dsn, $config['username'], $config['password'], [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$names = [
    'activity_principal_payment', 'activity_principal_refund_amount',
    'face_direct_payment', 'is_supplement', 'origin_cost_center_code',
    'settlement_order_no', 'strategy_account_snapshot', 'supplement_id',
    'supplement_no', 'withdrawable_cash_payment', 'withdrawable_cash_refund_amount',
];
$sql = $dialect === 'dm'
    ? "SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION,DATA_SCALE,NULLABLE,DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME='YDY_MEAL_ORDER'"
    : "SELECT COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,EXTRA FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=? AND TABLE_NAME='ydy_meal_order'";
$stmt = $pdo->prepare($sql);
$stmt->execute($dialect === 'dm' ? [] : [$config['database']]);
$rows = [];
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
    $row = array_change_key_case($row, CASE_LOWER);
    $key = strtolower((string)$row['column_name']);
    if (in_array($key, $names, true)) $rows[$key] = $row;
}
ksort($rows);
echo json_encode(['dialect' => $dialect, 'columns' => $rows,
    'missing' => array_values(array_diff($names, array_keys($rows)))],
    JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
