<?php
declare(strict_types=1);

function db(): PDO {
  static $pdo = null;
  if ($pdo instanceof PDO) return $pdo;

  $cfg = require __DIR__ . '/config.php';

  if (!is_array($cfg) || !isset($cfg['db']) || !is_array($cfg['db'])) {
    throw new RuntimeException("config.php no está devolviendo un array válido.");
  }

  $db = $cfg['db'];

  foreach (['host','name','user','pass','charset'] as $k) {
    if (!array_key_exists($k, $db)) {
      throw new RuntimeException("Falta la clave '$k' en config.php -> db.");
    }
  }

  $charset = $db['charset'] ?: 'utf8mb4';

  $dsn = "mysql:host={$db['host']};dbname={$db['name']};charset={$charset}";

  $pdo = new PDO($dsn, $db['user'], $db['pass'], [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
  ]);

  return $pdo;
}
