<?php 
 
namespace App\EventSubscriber; 
 
use ApiPlatform\Symfony\EventListener\EventPriorities; 
use App\ActionPlan\ActionPlanTasksPrepare; 
use App\Entity\ActionPlan; 
use App\Entity\ActionPlanTasks; 
use Doctrine\ORM\EntityManagerInterface; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpKernel\Event\ViewEvent; 
use Symfony\Component\HttpKernel\KernelEvents; 
 
final class ActionPlanTasksSubscriber implements EventSubscriberInterface 
{ 
    public function __construct(private ActionPlanTasksPrepare $actionPlanTasksPrepare, private EntityManagerInterface $entityManager ) 
    { 
    } 
 
    public static function getSubscribedEvents() 
    { 
        return [ 
            KernelEvents::VIEW => [ 
                ['preWriteActionPlanTasks', EventPriorities::PRE_WRITE] 
            ], 
        ]; 
    } 
 
    public function preWriteActionPlanTasks(ViewEvent $event): void 
    { 
        $actionPlanTasks = $event->getControllerResult(); 
        $method = $event->getRequest()->getMethod(); 
        if(($actionPlanTasks instanceof ActionPlanTasks) && Request::METHOD_PUT === $method){ 
            $idActionPlanTasks = $actionPlanTasks->getId(); 
            $sql = "select * from action_plan_tasks where id = $idActionPlanTasks"; 
            $conn = $this->entityManager->getConnection(); 
            $stmt = $conn->prepare($sql); 
            $oldActionPlanTasks = $stmt->executeQuery(); 
            $oldActionPlanTasks = $oldActionPlanTasks->fetchAssociative(); 
            if(($actionPlanTasks->getUserInCharge()) && ($oldActionPlanTasks['user_in_charge_id'] != $actionPlanTasks->getUserInCharge()->getId())){ 
                $this->actionPlanTasksPrepare->sendActionPlanTasksEmail($actionPlanTasks); 
            } 
            else{ 
                return; 
            } 
        } 
        if (!($actionPlanTasks instanceof ActionPlanTasks) || (Request::METHOD_POST !== $method)) { 
            return; 
        } 
        $this->actionPlanTasksPrepare->sendActionPlanTasksEmail($actionPlanTasks); 
    } 
}