<?php
declare(strict_types=1);
// Fixed local-development Store connection; SELECT-only, no HTTP or fixture writes.
if (($argv[1] ?? '') !== '--preflight') {
    fwrite(STDERR, "DENIED: --preflight required\n");
    exit(2);
}
set_exception_handler(static function (Throwable $e): void {
    echo json_encode(['status' => 'halt', 'class' => get_class($e), 'code' => (string)$e->getCode(),
        'message_sha256' => hash('sha256', $e->getMessage())]), PHP_EOL;
    exit(3);
});
$path = '/Users/wiscourper/Documents/workspace/zhct/zhctproject/ai_api/.env.local';
$config = parse_ini_file($path, true, INI_SCANNER_RAW);
if (!is_array($config) || !isset($config['DATABASE_ZHCT'])) {
    throw new RuntimeException('local Store config missing');
}
$store = $config['DATABASE_ZHCT'];
if (strtolower((string)($store['TYPE'] ?? '')) !== 'mysql') {
    throw new RuntimeException('local Store connection not MySQL');
}
foreach (['HOSTNAME','HOSTPORT','DATABASE','USERNAME','PASSWORD'] as $required) {
    if (!isset($store[$required]) || $store[$required] === '') {
        throw new RuntimeException('local Store config incomplete');
    }
}
$dsn = 'mysql:host=' . $store['HOSTNAME'] . ';port=' . (int)$store['HOSTPORT']
    . ';dbname=' . $store['DATABASE'] . ';charset=' . ($store['CHARSET'] ?? 'utf8');
$pdo = new PDO($dsn, $store['USERNAME'], $store['PASSWORD'], [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_TIMEOUT => 5,
    PDO::ATTR_EMULATE_PREPARES => false,
]);
$identity = $pdo->query('SELECT DATABASE() AS DB_NAME, @@version AS DB_VERSION')->fetch(PDO::FETCH_ASSOC);
if (!is_array($identity) || $identity['DB_NAME'] !== $store['DATABASE']) {
    throw new RuntimeException('local Store database identity mismatch');
}
$columns = $pdo->query("SELECT COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE "
    . "FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ydy_department' "
    . "AND COLUMN_NAME IN ('uuid','name','puuid','status','is_show') ORDER BY COLUMN_NAME")
    ->fetchAll(PDO::FETCH_ASSOC);
if (count($columns) !== 5) {
    throw new RuntimeException('department columns missing');
}
$counts = $pdo->query("SELECT COUNT(*) AS ROOT_ACTIVE, "
    . "SUM(CASE WHEN CHAR_LENGTH(uuid)>0 AND CHAR_LENGTH(name)>0 THEN 1 ELSE 0 END) AS NAMED_ACTIVE "
    . "FROM ydy_department WHERE puuid='0' AND status=1 AND is_show=1")
    ->fetch(PDO::FETCH_ASSOC);
echo json_encode(['status' => 'readonly-preflight', 'source' => 'code-.env.local:DATABASE_ZHCT',
    'database_sha256' => hash('sha256', $identity['DB_NAME']),
    'server_version' => $identity['DB_VERSION'],
    'root_active' => (int)$counts['ROOT_ACTIVE'],
    'named_active' => (int)$counts['NAMED_ACTIVE'],
    'columns' => $columns], JSON_UNESCAPED_SLASHES), PHP_EOL;
