<?php
/*
* ==============================================================
* Autor : Farid Benjomaa
* Modified by :
* COPYRIGHT (C) 2025, Media-Technologies
* ==============================================================
*/
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;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class EmailController extends AbstractController
{
private $callApiServices;
private $questionMailService;
private $parameters;
public function __construct(
CallApiServices $callApiServices,
QuestionMailService $questionMailService,
ParameterBagInterface $params
) {
$this->callApiServices = $callApiServices;
$this->questionMailService = $questionMailService;
$this->parameters = $params;
}
/**
* @Route("/email", name="app_email")
*/
public function index(): Response
{
$user = $this->getUser();
$clientId = 0;
if ($user) {
$clientId = $user->getClientId();
}
$client = $this->questionMailService->getEmail($this->callApiServices, $user);
// dd($client);
return $this->render('email/email.html.twig', [
'clientId' => $clientId
]);
}
/**
* @Route("/receptionMail", name="reception_mail")
*/
public function reception(CallApiServices $callApiServices): Response
{
$user = $this->getUser();
$clientId = 0;
if ($user) {
$clientId = $user->getClientId();
}
return $this->render('email/reception.html.twig', [
'clientId' => $clientId
]);
}
/**
* @Route("/send", name="envoie_mail")
*/
public function send(): Response
{
$user = $this->getUser();
$clientId = 0;
if ($user) {
$clientId = $user->getClientId();
}
return $this->render('email/envoie.html.twig', [
'clientId' => $clientId
]);
}
/**
* @Route("/mailView/{id}", name="mail_view")
*/
public function mailView(EntityManagerInterface $em, $id): Response
{
$client = $this->getUser();
$clientId = 0;
if ($client instanceof Client) {
$mail = $client->getEmailsSend();
$clientId = $client->getClientId();
}
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'],
'clientId' => $clientId,
]);
}
/**
* @Route("/receivedMail/{id}", name="app_receivedMail")
*/
public function receivedMail(EntityManagerInterface $em, $id, CallApiServices $callApiServices): Response
{
$user = $this->getUser();
$clientId = 0;
if ($user) {
$clientId = $user->getClientId();
}
$client = $this->questionMailService->getEmail($this->callApiServices, $user);
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'],
'clientId' => $clientId
]);
}
/**
* @Route("/delete/{id}", name="delete")
*/
public function delete(Emails $email, EntityManagerInterface $em): Response
{
$user = $this->getUser();
$clientId = 0;
if ($user) {
$clientId = $user->getClientId();
}
$em->remove($email);
$em->flush();
return $this->redirectToRoute("reception_mail", [
'clientId' => $clientId
]);
}
/**
* @Route("/questionMail/{id}", name="question_mail")
*/
public function questionMail(Request $request, EntityManagerInterface $em, $id, CallApiServices $callApiServices, QuestionMailService $questionMailService): Response
{
$user = $this->getUser();
$clientId = 0;
if ($user) {
$clientId = $user->getClientId();
}
$serviceId = $this->parameters->get('app.serviceId');
$accountId = $this->parameters->get('app.accountId');
$conseiller = $callApiServices->conseillerEtPlanning($id, $serviceId);
$email = new Emails();
$form = $this->createForm(EmailsType::class, $email);
$prestationEcriteMails = $callApiServices->prestationEcriteMails($accountId, $serviceId);
$cost = $prestationEcriteMails['questionCost'];
$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(), $cost);
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, $serviceId, $accountId);
$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,
'clientId' => $clientId,
'cost' => $cost
]);
}
}