<?php declare(strict_types=1);

namespace App\Doctrine;

use Doctrine\Persistence\Mapping\Driver\MappingDriver;

final readonly class FilteredDriver implements MappingDriver
{

    /**
     * @param array<string> $excludedClasses
     */
    public function __construct(
        private MappingDriver $inner,
        private array         $excludedClasses,
    ) {
    }

    public function getAllClassNames(): array
    {
        return array_filter(
            $this->inner->getAllClassNames(),
            fn($className) => !in_array($className, $this->excludedClasses),
        );
    }

    public function loadMetadataForClass($className, $metadata): void
    {
        if (in_array($className, $this->excludedClasses)) {
            return;
        }

        $this->inner->loadMetadataForClass($className, $metadata);
    }

    public function isTransient($className): bool
    {
        if (in_array($className, $this->excludedClasses)) {
            return true;
        }

        return $this->inner->isTransient($className);
    }

}