<?php
// app/Core/Database.php
// Obal nad PDO – vytváří připojení k MySQL a zpřístupňuje ho zbytku aplikace.

namespace App\Core;

/**
 * Zapouzdřuje připojení k databázi přes PDO.
 * Konstruktor přijme konfigurační pole a otevře spojení;
 * metoda pdo() ho pak poskytne repozitářům.
 */
class Database
{
    private \PDO $pdo;

    /**
     * Otevře PDO spojení s MySQL dle předané konfigurace.
     * Nastaví výjimky při chybách a FETCH_ASSOC jako výchozí režim načítání.
     */
    public function __construct(array $config)
    {
        $dsn = sprintf('mysql:host=%s;dbname=%s;charset=%s', $config['host'], $config['dbname'], $config['charset']);
        $this->pdo = new \PDO($dsn, $config['user'], $config['pass'], [
            \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
            \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        ]);
    }

    // Vrátí instanci PDO pro přímé dotazy v repozitářích
    public function pdo(): \PDO
    {
        return $this->pdo;
    }
}