<?php

/*
 * This file is part of the Serenity package.
 *
 * (c) CP Creation <web@cpcreation.fr>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Serenity\CoreBundle\Shared\ObjectMapper;

use Doctrine\Common\Collections\Collection;
use Symfony\Component\ObjectMapper\ObjectMapperInterface;
use Symfony\Component\ObjectMapper\Transform\MapCollection;

class CollectionTransformer extends MapCollection
{
    public function __construct(ObjectMapperInterface $objectMapper)
    {
        parent::__construct($objectMapper);
    }

    public function __invoke(mixed $value, object $source, ?object $target): mixed
    {
        if ($value instanceof Collection) {
            $value = $value->toArray();
        }

        if (\is_array($value)) {
            return array_values(
                array_filter(
                    $value,
                    static fn ($item) => null !== $item
                )
            );
        }

        return $value;
    }
}
