<?php

declare(strict_types=1);

namespace App\EventSubscriber;

use App\Entity\Constructeur;
use App\Entity\ConstructeurCategorie;
use App\Entity\ConstructeurTelephone;
use Doctrine\Bundle\DoctrineBundle\Attribute\AsDoctrineListener;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Events;

#[AsDoctrineListener(event: Events::onFlush)]
final class ConstructeurAuditSubscriber extends AbstractAuditSubscriber
{
    protected function supports(object $entity): bool
    {
        return $entity instanceof Constructeur;
    }

    protected function entityType(): string
    {
        return 'constructeur';
    }

    protected function snapshotEntity(object $entity): array
    {
        $telephones = $this->safeGet($entity, 'getTelephones');
        $categories = $this->safeGet($entity, 'getCategories');

        return [
            'id'         => $entity->getId(),
            'name'       => $this->safeGet($entity, 'getName'),
            'email'      => $this->safeGet($entity, 'getEmail'),
            'telephones' => $telephones instanceof Collection ? array_values(array_map(
                static fn (ConstructeurTelephone $t): array => ['numero' => $t->getNumero(), 'label' => $t->getLabel()],
                $telephones->toArray(),
            )) : [],
            'categories' => $categories instanceof Collection ? array_values(array_filter(array_map(
                static fn (ConstructeurCategorie $c): ?string => $c->getName(),
                $categories->toArray(),
            ))) : [],
        ];
    }
}
