<?php
// ============================================================
// FILE: includes/db.php
// Koneksi database menggunakan PDO (lebih aman dari mysqli biasa)
// ============================================================

require_once __DIR__ . '/config.php';

/**
 * Membuat dan mengembalikan koneksi PDO singleton.
 * Dipanggil: $pdo = db();
 */
function db(): PDO {
    static $pdo = null;                                // simpan satu instance saja

    if ($pdo === null) {
        $dsn = sprintf(
            'mysql:host=%s;dbname=%s;charset=utf8mb4',
            DB_HOST,
            DB_NAME
        );

        $options = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,  // lempar Exception jika error
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,        // hasil query sebagai array asosiatif
            PDO::ATTR_EMULATE_PREPARES   => false,                    // gunakan prepared statement asli
        ];

        try {
            $pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
        } catch (PDOException $e) {
            // Jangan tampilkan detail error ke pengguna di production
            error_log('DB Connection Error: ' . $e->getMessage());
            die('<div style="font-family:sans-serif;padding:2rem;color:red;">
                    <strong>Gagal terhubung ke database.</strong> Silakan cek konfigurasi di config.php.
                 </div>');
        }
    }

    return $pdo;
}