<?php

declare(strict_types=1);

$root = getenv('POC_TARGET_ROOT');
$dialect = getenv('POC_DIALECT');
$marker = getenv('POC_MARKER');
$orderNo = getenv('POC_SHOP_ORDER_NO');
if (!$root || !in_array($dialect, ['mysql', 'dm'], true)
    || !preg_match('/^CDXPAY[A-F0-9]{8}$/', (string)$marker)
    || !preg_match('/^[0-9]{15}$/', (string)$orderNo)) 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]);
$table = static function (string $name) use ($dialect): string {
    return $dialect === 'dm' ? 'YDY_' . strtoupper($name) : 'ydy_' . strtolower($name);
};
$stmt = $pdo->prepare('SELECT STAFF_UUID FROM ' . $table('user') . ' WHERE ACCOUNT=?');
$stmt->execute([$marker]);
$staffUuid = (string)$stmt->fetchColumn();
$stmt = $pdo->prepare('SELECT STATUS,FAIL_MESSAGE FROM ' . $table('consume_order_work') . ' WHERE ORDER_NO=?');
$stmt->execute([$orderNo]);
$work = array_change_key_case($stmt->fetch(PDO::FETCH_ASSOC) ?: [], CASE_LOWER);
$stmt = $pdo->prepare('SELECT COUNT(*) FROM ' . $table('meal_order') . ' WHERE ORDER_NO=?');
$stmt->execute([$orderNo]);
$orders = (int)$stmt->fetchColumn();
$redis = new Redis();
$redis->connect((string)getenv('POC_REDIS_HOST'), (int)getenv('POC_REDIS_PORT'), 1.0);
$guardKey = 'consume_orderpay_staff_' . $staffUuid;
$guardTtl = $staffUuid !== '' ? $redis->ttl($guardKey) : null;
$guardCleared = 0;
if (getenv('POC_CLEAR_REPEAT_GUARD') === '1' && $staffUuid !== '') {
    $guardCleared = (int)$redis->del($guardKey);
}
echo json_encode(['dialect' => $dialect, 'work_exists' => $work !== [],
    'work_status' => $work['status'] ?? null,
    'enqueue_fault_recorded' => strpos((string)($work['fail_message'] ?? ''), 'POC_QUEUE_PUSH_FAIL') !== false,
    'order_rows' => $orders,
    'staff_repeat_ttl' => $guardTtl, 'test_guard_cleared' => $guardCleared]) . PHP_EOL;
