<?php

declare(strict_types=1);

namespace App\Framework\Database;

final class Transaction
{
    public static function run(ConnectionInterface $connection, callable $callback): mixed
    {
        // Prüfe ob bereits eine Transaktion läuft
        if ($connection->inTransaction()) {
            // Keine neue Transaktion starten, direkt Callback ausführen
            return $callback();
        }

        $connection->beginTransaction();

        try {
            $result = $callback($connection);
            $connection->commit();
            return $result;
        } catch (\Throwable $e) {
            $connection->rollback();
            throw $e;
        }
    }
}
