<?php

declare(strict_types=1);

namespace App\Framework\Filesystem;

/**
 * Factory für Storage-Instanzen
 *
 * Ermöglicht flexible Storage-Erstellung basierend auf Konfiguration
 * und macht es einfach, neue Storage-Typen hinzuzufügen.
 */
final class StorageFactory
{
    public static function create(array $config): Storage
    {
        $type = $config['type'] ?? 'file';

        return match ($type) {
            'file' => new FileStorage($config['path'] ?? '/'),
            'memory' => new MemoryStorage(),
            // 'redis' => new RedisStorage($config),
            // 's3' => new S3Storage($config),
            default => throw new \InvalidArgumentException("Unknown storage type: {$type}")
        };
    }

    /**
     * @return array<string>
     */
    public static function getSupportedTypes(): array
    {
        return ['file', 'memory'];
    }

    public static function isTypeSupported(string $type): bool
    {
        return in_array($type, self::getSupportedTypes(), true);
    }
}
