<?php
declare(strict_types=1);
/**
 * FATE 站台 PDO 連線（選庫、逾時設定）。
 * 連線設定見 includes/fate_db_connect.php、config/db.php。
 */
if (!defined('FATE_SPA_API_BASE')) {
    require_once __DIR__ . DIRECTORY_SEPARATOR . 'app.php';
}
$fateRoot = dirname(__DIR__);

if (!defined('FATE_DB_NAME')) {
    define('FATE_DB_NAME', fate_app_member_database_name());
}

require_once $fateRoot . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'fate_db_connect.php';

$pdo = fate_db_make_pdo();

if (!isset($pdo) || !$pdo instanceof PDO) {
    throw new RuntimeException('未取得 PDO（請檢查 fate/config/db.php 或 FATE_DB_* 環境變數）');
}

$dbFate = preg_match('/^[A-Za-z0-9_]+$/', (string) FATE_DB_NAME) ? (string) FATE_DB_NAME : fate_app_member_database_name();
try {
    $currentDb = $pdo->query('SELECT DATABASE()')->fetchColumn();
    if (!is_string($currentDb) || $currentDb === '' || $currentDb !== $dbFate) {
        $pdo->exec('USE `' . $dbFate . '`');
    }
} catch (Throwable $e) {
    throw new RuntimeException('無法使用資料庫 `' . $dbFate . '`：' . $e->getMessage(), 0, $e);
}

// 讀寫逾時：Web 請求避免統計／慢查詢拖到反向代理 504；CLI 同步腳本不套用以免長任務被截斷
if (PHP_SAPI !== 'cli') {
    if (defined('FATE_DB_READ_TIMEOUT_SEC') && FATE_DB_READ_TIMEOUT_SEC > 0) {
        try {
            $pdo->setAttribute(PDO::MYSQL_ATTR_READ_TIMEOUT, (int) FATE_DB_READ_TIMEOUT_SEC);
        } catch (Throwable) {
        }
    }
    if (defined('FATE_DB_WRITE_TIMEOUT_SEC') && FATE_DB_WRITE_TIMEOUT_SEC > 0) {
        try {
            $pdo->setAttribute(PDO::MYSQL_ATTR_WRITE_TIMEOUT, (int) FATE_DB_WRITE_TIMEOUT_SEC);
        } catch (Throwable) {
        }
    }
}

$GLOBALS['pdo'] = $pdo;
