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