<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\RFQ\EventListener;
use BitBag\OpenMarketplace\Component\Organization\Entity\OrganizationInterface;
use BitBag\OpenMarketplace\Component\RFQ\Email\RFQEmailManagerInterface;
use BitBag\OpenMarketplace\Component\RFQ\Entity\MessageInterface;
use BitBag\OpenMarketplace\Component\RFQ\Entity\RFQInterface;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
final class MessageListener
{
public function __construct(
private RFQEmailManagerInterface $rfqEmailManager,
) {
}
public function __invoke(ResourceControllerEvent $event): void
{
$message = $event->getSubject();
if (!$message instanceof MessageInterface) {
return;
}
$rfq = $message->getRfq();
if (!$rfq instanceof RFQInterface) {
return;
}
$this->rfqEmailManager->sendNewMessageEmail($this->resolveOrganization($rfq, $message), $rfq);
}
private function resolveOrganization(RFQInterface $rfq, MessageInterface $message): ?OrganizationInterface
{
$buyerCustomers = $rfq->getBuyer()?->getCustomers();
if ($buyerCustomers?->contains($message->getCustomer())) {
return $rfq->getSeller();
}
return $rfq->getBuyer();
}
}