<?php

namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException;

class ExceptionSubscriber implements EventSubscriberInterface
{
    private $twig;

    public function __construct(\Twig\Environment $twig)
    {
        $this->twig = $twig;
    }

        public static function getSubscribedEvents()
    {
        return [
            KernelEvents::EXCEPTION => 'onKernelException',
        ];
    }

    public function onKernelException(ExceptionEvent $event)
{
    $exception = $event->getThrowable();
    if ($exception instanceof HttpException) {
        $statusCode = $exception->getStatusCode();
        $response = new Response();
        switch ($statusCode) {
            case 403:
                $content = $this->twig->render('error403.html.twig');
                break;
            case 404:
                $content = $this->twig->render('error404.html.twig');
                break;
            case 500:
                $content = $this->twig->render('error500.html.twig');
                break;
            default:
                $content = $this->twig->render('error404.html.twig');
                break;
        }
        $response->setContent($content);
        $response->setStatusCode($statusCode);
        $event->setResponse($response);
    } else {
        $response = new Response();
        $content = $this->twig->render('error404.html.twig');
        $response->setContent($content);
        $response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR);
        $event->setResponse($response);
    }
}

}

