<?php
namespace App\Controller;
use App\Entity\Client;
use App\Entity\Emails;
use App\Form\EmailsType;
use App\Services\CallApiServices;
use App\Services\QuestionMailService;
use PharIo\Manifest\Email;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class EmailController extends AbstractController
{
private $callApiServices;
private $questionMailService;
public function __construct(CallApiServices $callApiServices, QuestionMailService $questionMailService)
{
$this->callApiServices = $callApiServices;
$this->questionMailService = $questionMailService;
}
/**
* @Route("/email", name="app_email")
*/
public function index(): Response
{
$client = $this->getUser();
$client = $this->questionMailService->getEmail($this->callApiServices, $client);
// dd($client);
return $this->render('email/email.html.twig');
}
/**
* @Route("/receptionMail", name="reception_mail")
*/
public function reception(CallApiServices $callApiServices): Response
{
return $this->render('email/reception.html.twig');
}
/**
* @Route("/send", name="envoie_mail")
*/
public function send(): Response
{
return $this->render('email/envoie.html.twig');
}
/**
* @Route("/mailView/{id}", name="mail_view")
*/
public function mailView(EntityManagerInterface $em, $id): Response
{
$client = $this->getUser();
if ($client instanceof Client) {
$mail = $client->getEmailsSend();
}
foreach ($mail as $key => $mailId) {
$previous = array_key_exists($key - 1, $mail) ? $mail[$key - 1] : false;
$next = array_key_exists($key + 1, $mail) ? $mail[$key + 1] : false;
$last = array_key_last($mail);
$first = array_key_first($mail);
if ($previous == false) {
$previous = $last;
} else {
$previous = $key - 1;
}
if ($next == false) {
$next = $first;
} else {
$next = $key + 1;
}
$newMail[$key] = [
'previous' => $previous,
'current' => $key,
'next' => $next
];
}
return $this->render('email/mailView.html.twig', [
"mail" => $mail[$id],
"current" => $newMail[$id],
"previous" => $newMail[$id]['previous'],
"next" => $newMail[$id]['next']
]);
}
/**
* @Route("/receivedMail/{id}", name="app_receivedMail")
*/
public function receivedMail(EntityManagerInterface $em, $id, CallApiServices $callApiServices): Response
{
$client = $this->getUser();
$client = $this->questionMailService->getEmail($this->callApiServices, $client);
if ($client instanceof Client) {
$mail = $client->getEmailsRecieved();
}
foreach ($mail as $key => $mailId) {
$previous = array_key_exists($key - 1, $mail) ? $mail[$key - 1] : false;
$next = array_key_exists($key + 1, $mail) ? $mail[$key + 1] : false;
$last = array_key_last($mail);
$first = array_key_first($mail);
if ($previous == false) {
$previous = $last;
} else {
$previous = $key - 1;
}
if ($next == false) {
$next = $first;
} else {
$next = $key + 1;
}
$newMail[$key] = [
'previous' => $previous,
'current' => $key,
'next' => $next
];
$isRead = $mail[$key]['isRead'] = true;
$callApiServices->questionsMailMajMessage($mail[$key]['serviceId'], $mail[$key]['clientId'], $mail[$key]['complementId'], $mail[$key]['id'], $mail[$key]['answered'], $isRead);
}
return $this->render('email/receivedMailView.html.twig', [
"mail" => $mail[$id],
"current" => $newMail[$id],
"previous" => $newMail[$id]['previous'],
"next" => $newMail[$id]['next']
]);
}
/**
* @Route("/delete/{id}", name="delete")
*/
public function delete(Emails $email, EntityManagerInterface $em): Response
{
$em->remove($email);
$em->flush();
return $this->redirectToRoute("reception_mail");
}
/**
* @Route("/questionMail/{id}", name="question_mail")
*/
public function questionMail(Request $request, EntityManagerInterface $em, $id, CallApiServices $callApiServices, QuestionMailService $questionMailService): Response
{
$serviceId = $this->getParameter('app.serviceId');
$accountId = $this->getParameter('app.accountId');
$conseiller = $callApiServices->conseillerEtPlanning($id, $serviceId);
$email = new Emails();
$form = $this->createForm(EmailsType::class, $email);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$email->setSender($this->getUser());
$sender = $email->getSender();
$emailSend = $callApiServices->questionsMailEnvoiMessage($serviceId, $sender->getClientId(), $conseiller[0]['complementId'], $email->getTitle(), $email->getContent(), $email->getDate());
if (isset($emailSend['responseCode'])) {
$this->addFlash("messageErreur", "Votre message n'a pas été envoyé car vous ne disposé pas de credit suffisant.");
return $this->render('email/questionMail.html.twig', [
"mailForm" => $form->createView(),
"conseiller" => $conseiller
]);
} else {
if (isset($conseiller[0]['userMail'])){
$questionMailService->sendEmail($conseiller, $request);
$this->addFlash("message", "Votre message a été envoyé avec succès.");
return $this->redirectToRoute("app_email");
}
}
}
return $this->render('email/questionMail.html.twig', [
"mailForm" => $form->createView(),
"conseiller" => $conseiller
]);
}
}