<?php

namespace App\EntityListener;

use App\Entity\Campaign\Tasklist\Task;
use App\Entity\TimeLog;
use Doctrine\ORM\Mapping as ORM;
use Exception;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Security\Core\Security;

final class TimelogListener
{
    /**
     * @var ContainerInterface
     */
    private $container;

    /**
     * @var Security
     */
    private $security;

    public function __construct(Security $security, ContainerInterface $container)
    {
        $this->container = $container;
        $this->security = $security;
    }

    /**
     * @ORM\PostPersist()
     *
     * @param TimeLog $timelog
     */
    public function createFirstVersion(Timelog $timelog)
    {
        if ('task' === $timelog->getSubjectType()) {
            $taskService = $this->container->get('App\Service\Campaign\Tasklist\TaskService');

            try {
                $task = $taskService->get($timelog->getSubjectId());
            } catch (Exception $e) {
                return;
            }
            $activity = (new Task\Activity())
                ->setCreatedBy($this->security->getUser())
                ->setTask($task)
                ->setType('timelog')
                ->setTitle(sprintf('logged %sm against this task', $timelog->getTimeSpent()));

            $activityService = $this->container->get('App\Service\Campaign\Tasklist\Task\ActivityService');
            $activityService->save($activity);
        }
    }
}
