<?php

declare(strict_types=1);

// Read-only DM8 metadata and fixture guard. No command or DML.
$root = (string)getenv('POC_APP_ROOT');
if (getenv('POC_DIALECT') !== 'dm' || strpos(realpath($root) ?: '', '/tmp/zhct-') !== 0
    || !is_file($root . '/application/database.php')) {
    throw new RuntimeException('Only isolated Store DM runtime is allowed');
}
$config = require $root . '/application/database.php';
$pdo = new PDO('dm:host=' . $config['hostname'] . ';port=' . $config['hostport']
    . ';schema=' . $config['database'], $config['username'], $config['password'],
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$category = $pdo->query("SELECT ID FROM YDY_FOODS_CATE WHERE NAME='调味品类' AND PID=0")
    ->fetchAll(PDO::FETCH_COLUMN);
$columns = $pdo->query("SELECT COLUMN_NAME,DATA_TYPE,NULLABLE,DATA_DEFAULT FROM USER_TAB_COLUMNS"
    . " WHERE TABLE_NAME='YDY_FOODS_COMPOSITION' AND COLUMN_NAME IN"
    . " ('ID','NAME','CATEGORY','CONDIMENT_STATE','IS_DELETE','CREATE_BY','CREATE_TIME','UPDATE_TIME')"
    . ' ORDER BY COLUMN_ID')->fetchAll(PDO::FETCH_ASSOC);
$columns = array_map(static function (array $row): array {
    $row = array_change_key_case($row, CASE_LOWER);
    return ['column' => strtolower((string)$row['column_name']),
        'type' => strtoupper((string)$row['data_type']),
        'nullable' => (string)$row['nullable'],
        'has_default' => $row['data_default'] !== null];
}, $columns);
$oldSynthetic = (int)$pdo->query("SELECT COUNT(*) FROM YDY_FOODS_COMPOSITION"
    . " WHERE NAME LIKE 'CDXPARCOND%'")->fetchColumn();
echo json_encode([
    'dialect' => 'dm', 'top_condiment_category_count' => count($category),
    'top_condiment_category_id' => count($category) === 1 ? (int)$category[0] : null,
    'required_column_metadata' => $columns,
    'prior_cdxparcond_rows' => $oldSynthetic,
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
