<?php

namespace App\Framework\Database\Driver;

final readonly class SqliteDriver implements Driver
{
    public string $dsn;

    public array $options;

    public function __construct(
        public DriverConfig $config,
    ){
        $this->dsn = $this->createDns();
        $this->options = $this->getOptions();
    }

    private function createDns(): string
    {
        // Für SQLite verwenden wir den database-Parameter als Dateipfad
        // Falls es ein relativer Pfad ist, wird er relativ zum aktuellen Verzeichnis interpretiert
        // Für In-Memory-Datenbank kann ":memory:" verwendet werden
        return sprintf(
            'sqlite:%s',
            $this->config->database
        );
    }

    private function getOptions(): array
    {
        return [
            \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
            \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
            \PDO::ATTR_EMULATE_PREPARES => false,
            // SQLite-spezifische Optionen
            \PDO::ATTR_TIMEOUT => 30,
        ];
    }
}
