<?php

namespace Lc\ShopBundle\Controller\Backend;

use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\EasyAdminEvents;
use FOS\UserBundle\Model\UserManagerInterface;
use Lc\ShopBundle\Form\Backend\Ticket\TicketMessageType;
use Lc\ShopBundle\Form\Backend\Ticket\TicketStatusType;
use Lc\ShopBundle\Services\UtilsManager;
use Mailjet\MailjetSwiftMailer\SwiftMailer\MailjetTransport;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Security;
use Symfony\Contracts\Translation\TranslatorInterface;

class TicketController extends AdminController
{
        protected $ticketUtils;
        public function __construct(Security $security, UserManagerInterface $userManager, EntityManagerInterface $em, MailjetTransport $mailjetTransport, UtilsManager $utilsManager, TranslatorInterface $translator)
        {
                $this->ticketUtils = $utilsManager->getTicketUtils();
                parent::__construct($security, $userManager, $em, $mailjetTransport, $utilsManager, $translator);

        }


        public function showAction()
        {
                $this->dispatch(EasyAdminEvents::PRE_SHOW);

                $id = $this->request->query->get('id');
                $easyadmin = $this->request->attributes->get('easyadmin');
                $entity = $easyadmin['item'];

                $fields = $this->entity['show']['fields'];
                $deleteForm = $this->createDeleteForm($this->entity['name'], $id);

                $this->dispatch(EasyAdminEvents::POST_SHOW, [
                        'deleteForm' => $deleteForm,
                        'fields' => $fields,
                        'entity' => $entity,
                ]);

                $parameters = [
                        'entity' => $entity,
                        'fields' => $fields,
                        'delete_form' => $deleteForm->createView(),
                ];

                return $this->executeDynamicMethod('render<EntityName>Template', ['show', $this->entity['templates']['show'], $parameters]);
        }

        /**
         * The method that is executed when the user performs a 'show' action on an entity.
         *
         * @return Response
         */
        public function renderTicketTemplate($actionName, $templatePath, array $parameters = [])
        {
                if ($actionName == 'show') {
                        $parameters['form_add_ticket_message'] = $this->createCustomForm(TicketMessageType::class, 'newMessageTicket', $parameters, false)->createView();
                        $parameters['form_ticket_status'] = $this->createCustomForm(TicketStatusType::class, 'ticketStatus', $parameters)->createView();
                }
                return parent::renderTemplate($actionName, $templatePath, $parameters);

        }


        public function ticketStatusAction(){
                $easyadmin = $this->request->attributes->get('easyadmin');
                $ticket = $easyadmin['item'];

                $formTicketStatusForm = $this->createForm(TicketStatusType::class, $ticket);
                $formTicketStatusForm->handleRequest($this->request);

                if ($formTicketStatusForm->isSubmitted() && $formTicketStatusForm->isValid()) {
                                $this->em->persist($ticket);
                                $this->em->flush();

                                $this->utils->addFlash('success', 'success.ticket.statusChange');
                } else {
                        $this->utils->addFlash('error', $formTicketStatusForm->getErrors());
                }
                $response['flashMessages'] = $this->utils->getFlashMessages();

                return new Response(json_encode($response));
        }

        public function newMessageTicketAction(){
                $easyadmin = $this->request->attributes->get('easyadmin');
                $ticket = $easyadmin['item'];

                $formAddTicketMessage = $this->createForm(TicketMessageType::class);
                $formAddTicketMessage->handleRequest($this->request);

                if ($formAddTicketMessage->isSubmitted() && $formAddTicketMessage->isValid()) {
                        $this->ticketUtils->createTicketMessage(array(
                                'ticket'=>$ticket,
                                'message'=> $formAddTicketMessage->get('message')->getData(),
                                'answerByAdmin'=>true
                        ));

                        $this->utils->addFlash('success', 'success.ticket.addMessage');
                } else {
                        $this->utils->addFlash('error', $formAddTicketMessage->getErrors());
                }

                return $this->redirectToRoute('easyadmin', [
                        'action' => 'show',
                        'entity' => 'Ticket',
                        'id' => $ticket->getId()
                ]);
        }
}
