<?php

namespace Lc\SovBundle\Controller;

use Symfony\Component\ErrorHandler\Exception\FlattenException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Throwable;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\Mime\Email;

class ErrorController extends AbstractController
{

    public function show(
        Request $request,
        FlattenException $exception,
        DebugLoggerInterface $logger = null,
        MailerInterface $mailer
    ) {
        //Si != de 404 on envoit un mail de debug
        if ($exception->getStatusCode() != 404) {
            $mailDebug = $this->getParameter('app.mail_debug');
            if ($mailDebug) {
                $message = "URL : " . $request->getUri() . "<br>";
                $message .= "Code : " . $exception->getStatusCode() . "<br>";
                $message .= "Message : " . $exception->getMessage() . "<br>";
                $message .= "File : " . $exception->getFile() . "<br>";
                $message .= "Line : " . $exception->getLine() . "<br><br>";
                $message .= "Trace : <br>" . str_replace("\n", "<br>", $exception->getTraceAsString());
                $siteName = $this->getParameter('app.site_name');
                $email = (new Email())
                    ->from('nepasrepondre@laclic.fr')
                    ->to($mailDebug)
                    ->subject(
                        '[' . $siteName . '] [ERREUR ' . $exception->getStatusCode() . '] ' . $exception->getMessage() . ''
                    )
                    ->text(strip_tags($message))
                    ->html($message);

                $mailer->send($email);
            }
        }

        if ($exception->getStatusCode() == 404) {
            return $this->render('bundles/TwigBundle/Exception/error404.html.twig', [
                "code" => $exception->getStatusCode(),
                "message" => $exception->getMessage()
            ]);
        }
        if (str_contains($this->getRequestStack()->getCurrentRequest(), "/admin")) {
            return $this->render('@LcSov/exception/error.html.twig', [
                "code" => $exception->getStatusCode(),
                "message" => $exception->getMessage()
            ]);
        } else {
            return $this->render('bundles/TwigBundle/Exception/error.html.twig', [
                "code" => $exception->getStatusCode(),
                "message" => $exception->getMessage()
            ]);
        }
    }
}