<?php

declare(strict_types=1);

// Read-only preflight for the non-production Store DM command database.
$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]);
$today = date('Y-m-d'); // Same PHP date() boundary as MealOrderPickupComplete::execute().
$stmt = $pdo->prepare('SELECT COUNT(*) AS ALL_N,'
    . 'SUM(CASE WHEN PREPARE_STATUS=10 THEN 1 ELSE 0 END) AS PREPARING_N,'
    . 'SUM(CASE WHEN PREPARE_STATUS=20 THEN 1 ELSE 0 END) AS READY_N'
    . ' FROM YDY_MEAL_ORDER_PICKUP WHERE MEAL_DATE < ? AND PREPARE_STATUS IN (10,20)');
$stmt->execute([$today]);
$counts = array_change_key_case($stmt->fetch(PDO::FETCH_ASSOC) ?: [], CASE_LOWER);
$total = (int)$pdo->query('SELECT COUNT(*) FROM YDY_MEAL_ORDER_PICKUP')->fetchColumn();
$enabled = null;
try {
    $stmt = $pdo->prepare("SELECT CONFIG_VALUE FROM YDY_CONFIG WHERE CONFIG_KEY=? AND STATUS=1");
    $stmt->execute(['wanyisheng_sync_config']);
    $rows = $stmt->fetchAll(PDO::FETCH_COLUMN);
    if (count($rows) === 1) {
        $value = $rows[0];
        if (is_resource($value)) $value = stream_get_contents($value);
        $settings = json_decode((string)$value, true);
        $flag = is_array($settings) ? ($settings['enable'] ?? false) : false;
        $enabled = $flag === true || $flag === 1 || $flag === '1';
    }
} catch (Throwable $ignored) {
    // Config availability does not change the candidate predicate; report unknown.
}
echo json_encode([
    'dialect' => 'dm', 'today_by_php' => $today,
    'php_timezone' => date_default_timezone_get(),
    'pickup_table_rows' => $total,
    'pending_candidates' => (int)($counts['all_n'] ?? 0),
    'preparing_candidates' => (int)($counts['preparing_n'] ?? 0),
    'ready_candidates' => (int)($counts['ready_n'] ?? 0),
    'dispatcher_config_enabled' => $enabled,
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
