<?php

declare(strict_types=1);

namespace App\Framework\Database\Cache;

interface CacheStrategy
{
    /**
     * Speichert einen Wert im Cache
     */
    public function set(QueryCacheKey $key, array $value, int $ttlSeconds): bool;

    /**
     * Lädt einen Wert aus dem Cache
     */
    public function get(QueryCacheKey $key): ?array;

    /**
     * Prüft ob ein Schlüssel im Cache existiert
     */
    public function has(QueryCacheKey $key): bool;

    /**
     * Löscht einen Schlüssel aus dem Cache
     */
    public function delete(QueryCacheKey $key): bool;

    /**
     * Invalidiert Cache-Einträge basierend auf Pattern
     */
    public function invalidatePattern(string $pattern): int;

    /**
     * Löscht alle Cache-Einträge
     */
    public function clear(): void;

    /**
     * Gibt Cache-Statistiken zurück
     */
    public function getStats(): array;
}
