<?php

declare(strict_types=1);

namespace App\Framework\AsyncExamples\Database;

use PDOStatement;

/**
 * Database Query Result
 */
final readonly class DatabaseResult
{
    public function __construct(
        private PDOStatement $statement,
        public float $executionTime,
        public int $affectedRows
    ) {
    }

    /**
     * Holt alle Zeilen
     * @return array<int, array<string, mixed>>
     */
    public function fetchAll(): array
    {
        return $this->statement->fetchAll();
    }

    /**
     * Holt eine Zeile
     * @return array<string, mixed>|false
     */
    public function fetch(): array|false
    {
        return $this->statement->fetch();
    }

    /**
     * Holt einen einzelnen Wert
     */
    public function fetchColumn(int $column = 0): mixed
    {
        return $this->statement->fetchColumn($column);
    }

    /**
     * Gibt die Anzahl betroffener Zeilen zurück
     */
    public function getAffectedRows(): int
    {
        return $this->affectedRows;
    }

    /**
     * Gibt die Ausführungszeit zurück
     */
    public function getExecutionTime(): float
    {
        return $this->executionTime;
    }
}
