<?php

namespace App\Controller;

use App\Entity\Message;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Security;

class MessageController extends AbstractController
{

    private $security;

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

    public function messageNonLuAction(Request $request)
    {
        $messages = $this->getDoctrine()->getRepository(Message::class)->findBy(['receiver' => $this->security->getUser(),'lu' => false], ['create_at' => 'DESC']);
        return $this->render('@AdminLTE/Navbar/messages.html.twig', [
            'messages' => $messages,
            'total' => count($messages)
        ]);
    }

    /**
     * @Route("/app/messages", name="messages")
     */
    public function indexAction(Request $request)
    {
       $messages = $this->getDoctrine()->getRepository(Message::class)->findBy(['receiver' => $this->security->getUser()], ['create_at' => 'DESC']);
       $messagesNonLus = $this->getDoctrine()->getRepository(Message::class)->findBy(['receiver' => $this->security->getUser(),'lu' => false], ['create_at' => 'DESC']);
        return $this->render('messages/index.html.twig', [
            'messages' => $messages,
            'nonlus' => count($messagesNonLus),
            'etat' => 'receive'
        ]);
    }

    /**
     * @Route("/app/messages_envoyes", name="messages_envoyes")
     */
    public function envoyesAction(Request $request)
    {
       $messages = $this->getDoctrine()->getRepository(Message::class)->findBy(['receiver' => $this->security->getUser()], ['create_at' => 'DESC']);
       $messagesNonLus = $this->getDoctrine()->getRepository(Message::class)->findBy(['receiver' => $this->security->getUser(),'lu' => false], ['create_at' => 'DESC']);
        return $this->render('messages/index.html.twig', [
            'messages' => $messages,
            'nonlus' => count($messagesNonLus),
            'etat' => 'sent'
        ]);
    }

    /**
     * @Route("/app/message/write/{id}", name="message.write", defaults={"id"=0})
     */
    public function writeAction(Request $request, $id=0)
    {
        $users = $this->getDoctrine()
            ->getRepository(User::class)
            ->findBy([], ['familyName' => 'ASC', 'givenName' => 'ASC']);
        
        $message=$this->getDoctrine()->getRepository(Message::class)->findOneBy(['id' => $id]);
        
       $messagesNonLus = $this->getDoctrine()->getRepository(Message::class)->findBy(['receiver' => $this->security->getUser(),'lu' => false], ['create_at' => 'DESC']);

        if($request->request->get('send')!==null){
            
            //Add recevers
            foreach ($request->get('recevers') as $r) {
                $message = new Message();
                $message->setSender($this->security->getUser());
                $message->setTitle($request->request->get('objet'));
                $message->setContenu($request->request->get('contenu'));
                $recever=$this->getDoctrine()->getRepository(User::class)->findOneBy(['id' => $r]);
                $message->setReceiver($recever);
                $this->getDoctrine()->getManagerForClass(Message::class)->persist($message);
                //Send email
            }
            $this->getDoctrine()->getManagerForClass(Message::class)->flush();

            $this->addFlash('success', 'Message envoyé');
            return $this->redirectToRoute('messages');
        }
        return $this->render('messages/write.html.twig', [
            'users' => $users, 'message' => $message,'nonlus' => count($messagesNonLus)
        ]);
    }

    /**
     * @Route("/app/message/{id}/{etat}", name="message")
     */
    public function messageAction(Request $request, $id, $etat)
    {
        $message=$this->getDoctrine()->getRepository(Message::class)->findOneBy(['id' => $id]);
        $message->setLu(true);
        $this->getDoctrine()->getManagerForClass(Message::class)->persist($message);
        $this->getDoctrine()->getManagerForClass(Message::class)->flush();

        
       $messagesNonLus = $this->getDoctrine()->getRepository(Message::class)->findBy(['receiver' => $this->security->getUser(),'lu' => false], ['create_at' => 'DESC']);

        return $this->render('messages/read.html.twig', [
            'message' => $message,'nonlus' => count($messagesNonLus), 'etat' => $etat
        ]);
    }

    
}
