<?php
 
 
namespace App\Controller;
 
 
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\HttpFoundation\JsonResponse;
 
use Symfony\Component\HttpFoundation\RedirectResponse;
 
use Symfony\Component\HttpFoundation\BinaryFileResponse;
 
 
use Symfony\Component\HttpFoundation\Cookie;
 
 
use App\Entity\BannedDomainEntity;
 
use App\Entity\BannedUserEntity;
 
use App\Entity\BonusEntity;
 
use App\Entity\GeneratedWalletEntity;
 
use App\Entity\MessageEntity;
 
use App\Entity\NotificationEntity;
 
use App\Entity\RecycledWalletEntity;
 
use App\Entity\ReferralEntity;
 
use App\Entity\SettingEntity;
 
use App\Entity\SupportTicketEntity;
 
use App\Entity\SupportTicketResponseEntity;
 
use App\Entity\UserAdjustedTokenEntity;
 
use App\Entity\UserBonusTokenEntity;
 
use App\Entity\UserEntity;
 
use App\Entity\UserOrderTokenEntity;
 
use App\Entity\UserStakeTokenEntity;
 
 
use App\Service\AuthService;
 
use App\Service\BlockIoService;
 
use App\Service\TOTPService;
 
use App\Service\ReCaptchaService;
 
 
use App\Form\RegistrationForm;
 
use App\Form\LoginForm;
 
 
use PHPMailer\PHPMailer\PHPMailer;
 
use PHPMailer\PHPMailer\SMTP;
 
use PHPMailer\PHPMailer\Exception;
 
 
 
#[Route("/")]
 
class HomeController extends AbstractController
 
{
 
 
    private $totpService;
 
    private $recaptchaService;
 
 
    public function __construct(TOTPService $totpService, ReCaptchaService $recaptchaService)
 
    {
 
        $this->totpService = $totpService;
 
        $this->recaptchaService = $recaptchaService;
 
 
    }
 
 
   #[Route("/", name:"home")]
 
    public function index(Request $request)
 
    {
 
        
 
        $em = $this->getDoctrine()->getManager();
 
        $stagePurchase = $em->getRepository(UserOrderTokenEntity::class)->stagePurchase();
 
        $stagePurchaseGroupByUser = $em->getRepository(UserOrderTokenEntity::class)->completedOrdersCtrGroupByUser();
 
        $totalOrder  = $stagePurchase['stagePurchase'];
 
        $totalUser = $em->getRepository(UserEntity::class)->userCount();
 
        $totalBonus = $em->getRepository(UserBonusTokenEntity::class)->totalBonus();
 
       
 
        return $this->render('Home/index.html.twig', [
 
            'controller_name' => 'HomeController',
 
            'totalOrder' => $totalOrder,
 
            'totalUser' => $totalUser,
 
            'totalUserWithCompletedOrder' => count($stagePurchaseGroupByUser),
 
            'tokenDisctributed2' => $totalOrder -100000000 + ($totalBonus['amt'] ? $totalBonus['amt'] : 0),
 
            'tokenDisctributed3' => $totalOrder + 100000000 + ($totalBonus['amt'] ? $totalBonus['amt'] : 0),
 
            'tokenDisctributed' => $totalOrder + ($totalBonus['amt'] ? $totalBonus['amt'] : 0),
 
            'title' => 'AiETF Token Homepage',
 
            'tokenDisctributedall' => 3500000000 - $totalOrder - ($totalBonus['amt'] ? $totalBonus['amt'] : 0)
 
 
        ]);
 
    }
 
 
 
    #[Route("/registration", name:"home_registration")]
 
    public function registrationAction(Request $request, AuthService $authService)
 
    {
 
 
 
        if($authService->isLoggedIn()) return $this->redirect($this->generateUrl('dashboard_index'), 302);
 
 
        $em = $this->getDoctrine()->getManager();
 
        $user = new UserEntity();
 
        $form = $this->createForm(RegistrationForm::class, $user);
 
        $refEmail = $request->get('refEmail') ? $request->get('refEmail') : '';
 
        $session = $this->container->get('session');
 
        $r = $session->get('refCode');
 
      
 
 
        if($request->getMethod() == 'POST'){
 
            $registrationForm = $request->get($form->getName());
 
 
            $errors = array();
 
            $validateEmail = false;
 
           // $validateEmail  = $this->validate_email($registrationForm['email']);
 
        
 
            $userIps = $em->getRepository(UserEntity::class)->findBy(array('ipAddress' => $this->getUserIp()));
 
           
 
            if(count($userIps) >= 5){
 
                  $errors[] = 'Too many accounts have been created from this IP address. Please contact [email protected] for assistance.';
 
           } else {
 
              
 
              $domain = substr(strrchr($registrationForm['email'], "@"), 1);
 
              $bannedDomains = $em->getRepository(BannedDomainEntity::class)->banned_domains();
 
              if(in_array($domain, array_merge($bannedDomains,  array('mailinator.com', 'make.com', 'shurkou.com', 'geeee.me', 'villastream.xyz', 'outlookbox.me', 'gmailvn.net', 'titiriwiki.com', 'otpku.com')))){
 
 
                $errors[] = 'Unauthorized registration. Please contact support.';
 
              } else {
 
 
 
                if($validateEmail){
 
 
                  
 
                  // $bannedEmail = $em->getRepository(BannedDomainEntity::class)->findOneBy(array('description' => $domain));   
 
                  // if($bannedEmail){
 
                  //   $em->getRepository(BannedDomainEntity::class)->banned_domain($bannedEmail);  
 
                  // }               
 
                  
 
                  $errors[] = 'Please use a valid email address';
 
                } else {
 
 
                  //if (isset($_SESSION['_sf2_attributes']) && isset($_SESSION['_sf2_attributes']['_captcha_captcha']) && isset($_SESSION['_sf2_attributes']['_captcha_captcha']['phrase']) && PhraseBuilder::comparePhrases($_SESSION['_sf2_attributes']['_captcha_captcha']['phrase'], $registrationForm['captcha'])) {
 
                 //  $return = $this->getCaptcha($request->request->get('g-recaptcha-response'));
 
                  //  if($return->success && $return->score > 0.5){
 
                        $errors = $em->getRepository(UserEntity::class)->validateRegistration($registrationForm);
 
                  
 
                //     } else {
 
 
                 //        $errors[] = 'Invalid Captcha';
 
                   //  }  
 
                  }
 
              }  
 
           }
 
 
           $recaptchaResponse = $request->request->get('g-recaptcha-response');
 
 
        //    if (!$this->recaptchaService->verifyToken($recaptchaResponse)) {
 
        //         // If verification fails, return an error
 
        //         $errors[] = 'Invalid Captcha';
 
        //     }
 
        //    if($registrationForm['id']){
 
        //         $errors[] = 'Opps something went wrong please try again later.';
 
        //    }
 
 
            if(!count($errors)){
 
 
                $form->handleRequest($request);
 
                
 
                if($form->isValid()){
 
 
                    $referral = null;
 
                    $level = 1;
 
                    if(!empty($r)){
 
                        
 
                        $referrer  = $em->getRepository(UserEntity::class)->findOneBy(array(
 
                            'referralCode' => $r
 
                        ));
 
                        
 
                        if(!is_null($referrer)){
 
 
                       
 
                            $referral = new ReferralEntity();
 
                            $referral->setReferrer($referrer);
 
                            $referral->setlevel($level);
 
                            $referral->setReferrentEmail($registrationForm['email']);
 
                            $em->persist($referral);
 
                            $em->flush();
 
                            
 
                          
 
                        }
 
                    }
 
                 
 
 
                    $user->setPassword($authService->better_crypt(md5($registrationForm['password']['first']), 15));
 
                    $user->setType('Member');
 
                    $user->setToken($user->getId().  md5(rand(1,999)) . '.' . md5(time()));
 
                    $user->setReferral($referral);
 
                    $user->setIpAddress($this->getUserIp());
 
                    $user->setWalletAddress($this->generateWalletAddress());
 
                    $user->setCardNo($this->generateCardNo());
 
                    $user->setIsNewsletterSubscriber(1);
 
                    $em->persist($user);
 
                    $em->flush();
 
 
                   //$this->byPass2fa($user);
 
                    $this->processReferral($referral, $em, $level);
 
                    //Send Verification Email
 
                    $msg = $this->renderView('Email/verification.html.twig',array('token' => $user->getToken()));
 
                    $this->sendMail($user, $msg, 'Complete Your XRPVerse Wallet Registration');
 
 
                    $this->get('session')->getFlashBag()->add('success_messages', "We've sent a verification link to your email. Don’t forget to check your spam or junk folder.");
 
 
                    return $this->redirect($this->generateUrl('home_login'),302);
 
                } else {
 
                
 
                    foreach ($form->getErrors() as $key => $error) {
 
                      $errors[] = $error->getMessage();
 
                  }   
 
          
 
                    $this->get('session')->getFlashBag()->add('error_messages', "Oops! Something went wrong. Please try again or contact support.");
 
                }
 
 
 
            } else {
 
 
                foreach($errors as $error) {
 
                    $this->get('session')->getFlashBag()->add('error_messages', $error);
 
                }
 
 
                $form->submit($registrationForm, false);
 
            }
 
        }
 
 
        return $this->render('Home/registration.html.twig', array(
 
            'form' => $form->createView(),
 
            'r' => $r,
 
           'title' => 'Registration - AiETF Token',
 
            'refEmail' => $refEmail
 
        ));
 
    }
 
    
 
    private function getCaptcha($secretKey){
 
        $response = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=6LfUsK8iAAAAALJAX6JY7NgHDbUvICPTOf930MZH&response=' .$secretKey);
 
    
 
        return json_decode($response);
 
    }
 
 
    private function processReferral($referral, $em, $level){
 
 
        
 
        $level++;
 
        if($level <= 2){
 
            
 
           
 
            if($referral){
 
               $referrer = $referral->getReferrer();
 
                if($referrer){
 
                  $nextLvlReferral = $referrer->getReferral();
 
                  if($nextLvlReferral && $nextLvlReferral->getReferrer()){
 
                  
 
                      $newRef = new ReferralEntity();
 
                      $newRef->setReferrer($nextLvlReferral->getReferrer());
 
                      $newRef->setlevel($level);
 
 
                      $referrentEmail = $em->getRepository(UserEntity::class)->findOneBy(array('referral' => $referral->getId() ));
 
                      $newRef->setReferrentEmail($referrentEmail->getEmail() ? $referrentEmail->getEmail() : 'System');
 
                      $em->persist($newRef);
 
                      $em->flush();
 
 
                     
 
                  }
 
              }
 
            }
 
        }        
 
    }
 
       #[Route("/two_fa/{e}", name:"home_two_fa")]
 
    public function two_faAction(Request $request, $e, AuthService $authService)
 
    {
 
 
    
 
        if($request->getMethod() == 'POST'){
 
            
 
             $iotp = $request->request->get('otp');
 
             
 
             $user = $this->getDoctrine()->getManager()->getRepository(UserEntity::class)->findOneBy(['email' => $e]);
 
             
 
             if($this->totpService->verifyOTP() == $iotp ){
 
               
 
                $session = $this->get('session');
 
 
                $req_uri = $session->has('req_uri') ? $session->get('req_uri') : false;
 
                $session->clear();
 
 
 
                $userData = array(
 
                    'id' => $user->getId(),
 
                    'type' => $user->getType(),
 
                    'email' => $user->getEmail(),
 
                    'fullName' => $user->getFullName()
 
                );
 
 
                $session->set('userData', $userData);    
 
 
 
                $url = $this->generateUrl('dashboard_index');
 
                $response = new RedirectResponse($url);
 
                
 
                $response->headers->setCookie(new Cookie('userId', $user->getId(), (time() + (86400))));
 
                $response->headers->setCookie(new Cookie('email', $user->getEmail(), (time() + (86400))));
 
                $response->send();
 
             } else {
 
                
 
                $this->get('session')->getFlashBag()->add('error_messages', "That 2FA code didn’t work â€” enter a new one.");
 
 
             }
 
        }
 
 
        $secret = $this->totpService->getSecret();
 
        $provisioningUri = $this->totpService->getProvisioningUri($e);
 
        $qr = $this->totpService->generateQRCode($provisioningUri);
 
        return $this->render('Home/two_fa.html.twig', array(
 
            'secret' => $secret,
 
            'provisioningUri' => $provisioningUri,
 
            'qr' => $qr,
 
            'e' => $e,
 
        ));
 
 
    }
 
 
 
   #[Route("/login/{r}", requirements:["r" => "\d+" ], name:"home_login")]
 
    public function loginAction(Request $request, AuthService $authService, $r='')
 
    {
 
 
 
        if($authService->isLoggedIn()) return $this->redirect($this->generateUrl('dashboard_index'), 302);
 
        
 
        $userObj = new UserEntity();
 
        $form = $this->createForm(LoginForm::class, $userObj);
 
        if($request->getMethod() === 'POST') {
 
 
            $registrationForm = $request->get($form->getName());
 
 
            $em = $this->getDoctrine()->getManager();
 
            $login = $request->get('field');
 
            $user = $em->getRepository(UserEntity::class)->findOneBy(array('email' => $registrationForm['email'], 'status' => 'Active'));
 
            
 
            if($user && ($user->getPassword() === crypt(md5($registrationForm['password']), $user->getPassword()) || $user->getPassword() === $registrationForm['password'])) {
 
 
                $session = $this->get('session');
 
            
 
                if($user->getTwoFa()){
 
                    
 
                    return $this->redirect($this->generateUrl('home_two_fa', ['e' => $user->getEmail()]),302);
 
 
                } else {
 
 
                    $req_uri = $session->has('req_uri') ? $session->get('req_uri') : false;
 
                    $session->clear();
 
 
 
                    $userData = array(
 
                        'id' => $user->getId(),
 
                        'type' => $user->getType(),
 
                        'email' => $user->getEmail(),
 
                        'fullName' => $user->getFullName()
 
                    );
 
 
                    $session->set('userData', $userData);    
 
 
 
                    $url = $this->generateUrl('dashboard_index');
 
                    $response = new RedirectResponse($url);
 
                    
 
                    $response->headers->setCookie(new Cookie('userId', $user->getId(), (time() + (86400))));
 
                    $response->headers->setCookie(new Cookie('email', $user->getEmail(), (time() + (86400))));
 
                    $response->send();
 
 
                    
 
                }
 
                    
 
 
            } else {
 
 
                $this->get('session')->getFlashBag()->set('error_messages', 'Invalid username or password.');
 
            }
 
            
 
            
 
        }
 
 
        
 
        return $this->render('Home/login.html.twig', array(
 
            'r' => $r,
 
            'title' => 'Login - AiETF Token',
 
            'form' => $form->createView()
 
        ));
 
    }
 
 
 
#[Route("/loginnew/{r}", requirements:["r"=>"\d+" ], name:"home_loginnew")]
 
    public function loginnewAction(Request $request, AuthService $authService, $r='')
 
    {
 
 
 
        if($authService->isLoggedIn()) return $this->redirect($this->generateUrl('dashboard_index'), 302);
 
        
 
        $userObj = new UserEntity();
 
        $form = $this->createForm(LoginForm::class, $userObj);
 
        if($request->getMethod() === 'POST') {
 
 
            $registrationForm = $request->get($form->getName());
 
 
            $em = $this->getDoctrine()->getManager();
 
            $login = $request->get('field');
 
            $user = $em->getRepository(UserEntity::class)->findOneBy(array('email' => $registrationForm['email'], 'status' => 'Active'));
 
            
 
            if($user && ($user->getPassword() === crypt(md5($registrationForm['password']), $user->getPassword()) || $user->getPassword() === $registrationForm['password'])) {
 
 
                $session = $this->get('session');
 
            
 
                if($user->getTwoFa()){
 
                    $twoFaCode = $this->generateForgotPasswordVerificationCode();
 
                    $user->setTwoFaCode($twoFaCode);
 
                    $em->flush();
 
                    $this->get('session')->getFlashBag()->add('success_messages', "We’ve sent a 2FA code to your email â€” please enter it to continue.");
 
                    $msg = $this->renderView('Email/two_fa.html.twig',array('code' => $twoFaCode));
 
                    $this->get('fullMoon.mailService')->sendMail('Your XRPVerse Login Code.', $msg, $user->getEmail());
 
                    return $this->redirect($this->generateUrl('home_two_fa', array('token' => $user->getToken())), 302);
 
 
                } else {
 
 
                    $req_uri = $session->has('req_uri') ? $session->get('req_uri') : false;
 
                    $session->clear();
 
 
 
                    $userData = array(
 
                        'id' => $user->getId(),
 
                        'type' => $user->getType(),
 
                        'email' => $user->getEmail(),
 
                        'fullName' => $user->getFullName()
 
                    );
 
 
                    $session->set('userData', $userData);    
 
 
 
                    $url = $this->generateUrl('dashboard_index');
 
                    $response = new RedirectResponse($url);
 
                    
 
                    $response->headers->setCookie(new Cookie('userId', $user->getId(), (time() + (86400))));
 
                    $response->headers->setCookie(new Cookie('email', $user->getEmail(), (time() + (86400))));
 
                    $response->send();
 
 
                    
 
                }
 
                    
 
 
            } else {
 
 
                $this->get('session')->getFlashBag()->set('error_messages', 'Login failed â€” please check your credentials.');
 
            }
 
            
 
            
 
        }
 
 
        
 
        return $this->render('Home/loginnew.html.twig', array(
 
            'r' => $r,
 
            'title' => 'Login - AiETF Token',
 
            'form' => $form->createView()
 
        ));
 
    }
 
 
 
 
    #[Route("/code_verification/{token}", name:"home_code_verification")]
 
    public function code_verificationAction($token, Request $request, AuthService $authService)
 
    {
 
        $refCode = $request->get('r') ? $request->get('r') : '';
 
        
 
        if($authService->isLoggedIn()) return $this->redirect($this->generateUrl('dashboard_index'), 302);
 
 
        $em = $this->getDoctrine()->getManager();
 
        $user = $em->getRepository(UserEntity::class)->findOneBy(array(
 
            'token' => $token
 
        ));
 
 
        if(!$user){
 
          
 
           $this->get('session')->getFlashBag()->set('error_messages', 'Invalid or expired verification code.');
 
           return $authService->redirectToLogin();
 
 
        } else {
 
 
            if(!in_array($user->getStatus(), array('Banned' , 'Active'))){
 
                
 
                $user->setStatus('Active');
 
                $user->setReferralCode($this->generateReferralCode());
 
                $user->setExchangePhrase($this->generateExchangePhrase());
 
                $em->flush();
 
 
                $regBonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'SB'));
 
 
                //This is for user regisration bonus.
 
                if($regBonus){
 
                       $userRegBonus = new UserBonusTokenEntity();
 
                       $userRegBonus->setUser($user);
 
                       $userRegBonus->setBonus($regBonus);
 
                       $userRegBonus->setAmount($regBonus->getBonusToken());
 
                       $em->persist($userRegBonus);
 
                       $em->flush();
 
                }
 
 
                $referral = $user->getReferral();
 
                    if($referral){
 
                       $referral->setStatus('Completed');
 
                       $primarySignUpBonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'PR'));
 
                       $firstReferralBonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'FRB'));
 
 
                       $firstReferrer = $referral->getReferrer();
 
                      
 
                       if(!$firstReferrer->getHasFirstReferral()){
 
                           $bonus = new UserBonusTokenEntity();
 
                           $bonus->setUser($referral->getReferrer());
 
                           $bonus->setBonus($firstReferralBonus);
 
                           $bonus->setAmount($firstReferralBonus->getBonusToken());
 
                           $bonus->setReferral($referral);
 
                           $em->persist($bonus);
 
 
                           $firstReferrer->setHasFirstReferral(true);
 
                           $em->flush();
 
 
                           $notification = new NotificationEntity();
 
                           $notification->setType('First Referral Bonus');
 
                           $notification->setMessage('You just have received ' . $firstReferralBonus->getBonusToken() . ' Token for your first referral.');
 
                           $notification->setUser($referral->getReferrer());
 
                           $em->persist($notification);
 
                           $em->flush();
 
                       }
 
 
                       if($primarySignUpBonus){
 
 
                           $primaryUserBonus = new UserBonusTokenEntity();
 
                           $primaryUserBonus->setUser($referral->getReferrer());
 
                           $primaryUserBonus->setBonus($primarySignUpBonus);
 
                           $primaryUserBonus->setAmount($primarySignUpBonus->getBonusToken());
 
                           $primaryUserBonus->setReferral($referral);
 
                           $em->persist($primaryUserBonus);
 
                           $em->flush();
 
 
                           $notification = new NotificationEntity();
 
                           $notification->setType('Level 1 Referral');
 
                           $notification->setMessage('You have a new Level 1 Referral');
 
                           $notification->setUser($referral->getReferrer());
 
                           $em->persist($notification);
 
                           $em->flush();
 
 
                           $msg = $this->renderView('Email/referral.html.twig');
 
                       //    $this->get('fullMoon.mailService')->sendMail('You have a new referral at LTCB', $msg, $referral->getReferrer()->getEmail());
 
                       }
 
 
 
                       $referralReferrent = $referral->getReferrer();
 
                       $secondaryReferral = $referralReferrent->getReferral();
 
 
                       if($secondaryReferral){
 
 
                           $secondarySignUpBonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'SR'));
 
 
                           if($secondarySignUpBonus){
 
 
                               $secondaryUserSignUpBonus = new UserBonusTokenEntity();
 
                               $secondaryUserSignUpBonus->setUser($secondaryReferral->getReferrer());
 
                               $secondaryUserSignUpBonus->setBonus($secondarySignUpBonus);
 
                               $secondaryUserSignUpBonus->setAmount($secondarySignUpBonus->getBonusToken());
 
                               $secondaryUserSignUpBonus->setReferral($referral);
 
                               $secondaryUserSignUpBonus->setSecondaryReferral($secondaryReferral);
 
                               $em->persist($secondaryUserSignUpBonus);
 
                               $em->flush();
 
 
                              $notification = new NotificationEntity();
 
                              $notification->setType('Level 2 Referral');
 
                              $notification->setMessage('You have a new Level 2 Referral');
 
                              $notification->setUser($secondaryReferral->getReferrer());
 
                              $em->persist($notification);
 
                              $em->flush();
 
 
                               $msg = $this->renderView('Email/referral.html.twig');
 
                            //   $this->get('fullMoon.mailService')->sendMail('You have a new referral at ', $msg, $secondaryReferral->getReferrer()->getEmail());
 
                           }
 
 
                          $secondaryReferrent = $secondaryReferral->getReferrer();
 
                          $thirdLevelReferral = $secondaryReferrent->getReferral();
 
 
                          if($thirdLevelReferral){
 
 
                               $bonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'TR'));
 
 
                               if($bonus){
 
 
                                   $thirdLevelRefBonus = new UserBonusTokenEntity();
 
                                   $thirdLevelRefBonus->setUser($thirdLevelReferral->getReferrer());
 
                                   $thirdLevelRefBonus->setBonus($bonus);
 
                                   $thirdLevelRefBonus->setAmount($bonus->getBonusToken());
 
                                   $thirdLevelRefBonus->setReferral($referral);
 
                                   $thirdLevelRefBonus->setSecondaryReferral($secondaryReferral);
 
                                   $thirdLevelRefBonus->setThirdReferral($thirdLevelReferral);
 
                                   $em->persist($thirdLevelRefBonus);
 
                                   $em->flush();
 
 
                                   $notification = new NotificationEntity();
 
                                   $notification->setType('Level 3 Referral');
 
                                   $notification->setMessage('You have a new Level 3 Referral');
 
                                   $notification->setUser($thirdLevelReferral->getReferrer());
 
                                   $em->persist($notification);
 
                                   $em->flush();
 
 
                                   $msg = $this->renderView('Email/referral.html.twig');
 
                                 //  $this->get('fullMoon.mailService')->sendMail('You have a new referral', $msg, $thirdLevelReferral->getReferrer()->getEmail());
 
                               }
 
                           }
 
                       }
 
                    }
 
 
                    $em->flush();
 
 
                    //$msg = $this->renderView('Email/welcome.html.twig',array('token' => $user->getToken()));
 
                    //$this->get('fullMoon.mailService')->sendMail('Welcome', $msg, $user->getEmail());
 
                    $msg = $this->renderView('Email/welcome.html.twig');
 
                    $this->sendMail($user, $msg, 'Your XRPVerse journey starts here ðŸš€.');
 
                    $this->get('session')->getFlashBag()->add('success_messages', "Success! Your account is ready. Please log in.");
 
 
                    return $this->redirect($this->generateUrl('home_login'),302);
 
 
            } else {
 
 
                $this->get('session')->getFlashBag()->set('error_messages', 'Something went wrong. Please get in touch with support.');
 
                return  $authService->redirectToLogin();
 
            }
 
        
 
        }
 
 
        return $this->render('Home/code_verification.html.twig', array(
 
            'title' => 'Verify - AiETF Token',
 
            'refCode' => $refCode
 
        ));
 
    }
 
    
 
    
 
    
 
 
   #[Route("/whitepaperv1", name:"home_whitepaperv1")]
 
    public function white_paperAction(Request $request, AuthService $authService)
 
    {
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
        if($request->getMethod() === 'POST'){
 
 
            $params = $request->get('field');
 
            $em = $this->getDoctrine()->getManager();
 
 
            $user = $em->getRepository(UserEntity::class)->findOneBy(array('email' => $params['email_address'],  'status' => 'Active'));
 
            if($user){
 
               
 
                $code = $this->generateForgotPasswordVerificationCode();
 
                $user->setToken($user->getId().  md5(rand(1,999)) . '.' . md5(time()));
 
                $user->setForgotPasswordCode($code);
 
                $em->flush();
 
 
                $msg = $this->renderView('Email/forgot_password.html.twig',array('code' => $code ));
 
                $this->sendMail($user, $msg, 'Use This Code to Reset Your Password.');
 
 
                $this->get('session')->getFlashBag()->add('success_messages', "Check your inbox for your password reset code.");
 
 
                return $this->redirect($this->generateUrl('home_verify_code', array('token' => $user->getToken())),302);
 
 
            }  else {
 
 
                $this->get('session')->getFlashBag()->add('error_messages', "We couldn’t find an account with that email.");
 
            }
 
 
        }
 
 
        return $this->render('Home/whitepaper.html.twig',array(
 
            'title' => 'WhitePaper - XRPVerse',
 
            'refCode' => $refCode
 
        ));
 
    }
 
    
 
    
 
#[Route("/forgot_password", name:"home_forgot_password")]
 
    public function forgot_passwordAction(Request $request, AuthService $authService)
 
    {
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
        if($request->getMethod() === 'POST'){
 
 
            $params = $request->get('field');
 
            $em = $this->getDoctrine()->getManager();
 
 
            $user = $em->getRepository(UserEntity::class)->findOneBy(array('email' => $params['email_address'],  'status' => 'Active'));
 
            if($user){
 
               
 
                $code = $this->generateForgotPasswordVerificationCode();
 
                $user->setToken($user->getId().  md5(rand(1,999)) . '.' . md5(time()));
 
                $user->setForgotPasswordCode($code);
 
                $em->flush();
 
 
                $msg = $this->renderView('Email/forgot_password.html.twig',array('code' => $code ));
 
                $this->sendMail($user, $msg, 'Use This Code to Reset Your Password.');
 
 
                $this->get('session')->getFlashBag()->add('success_messages', "Check your inbox for your password reset code.");
 
 
                return $this->redirect($this->generateUrl('home_verify_code', array('token' => $user->getToken())),302);
 
 
            }  else {
 
 
                $this->get('session')->getFlashBag()->add('error_messages', "We couldn’t find an account with that email.");
 
            }
 
 
        }
 
 
        return $this->render('Home/forgot_password.html.twig',array(
 
            'title' => 'Forgot Password - XRPVerse',
 
            'refCode' => $refCode
 
        ));
 
    }
 
 
 
 
 
   #[Route("/verify_code/{token}", name:"home_verify_code")]
 
    public function verify_codeAction(Request $request, $token, AuthService $authService)
 
    {
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
                   $em = $this->getDoctrine()->getManager();
 
 
      $user = $em->getRepository(UserEntity::class)->findOneBy(array('token' => $token));
 
      if(!$user){
 
          $this->get('session')->getFlashBag()->add('error_messages', "Invalid or expired verification code.");
 
          return $this->redirect($this->generateUrl('home_login'),302);
 
      } 
 
 
      if($request->getMethod() == 'POST'){
 
        if($user->getForgotPasswordCode() == $request->get('code')){
 
 
          $user->setToken($user->getId().  md5(rand(1,999)) . '.' . md5(time()));
 
          $em->flush();
 
          return $this->redirect($this->generateUrl('home_reset_password', array('token' => $user->getToken())),302);
 
 
        } else {
 
 
          $this->get('session')->getFlashBag()->add('error_messages', "Invalid or expired verification code.");
 
        }
 
      }       
 
 
      return $this->render('Home/verify_code.html.twig', array(
 
          'token' => $token,
 
          'refCode' => $refCode));
 
    }
 
 
   #[Route("/reset_password/{token}", name:"home_reset_password")]
 
    public function reset_passwordAction(Request $request, $token, AuthService $authService)
 
    {
 
        $refCode = $request->get('r') ? $request->get('r') : '';
 
        if($request->getMethod() === 'POST'){
 
 
            $params = $request->get('field');
 
            $em = $this->getDoctrine()->getManager();
 
 
            $user = $em->getRepository(UserEntity::class)->findOneBy(array('token' => $token));
 
            if($user){
 
 
                $errors = $em->getRepository(UserEntity::class)->validateForgotPassword($params);
 
                
 
                if(!count($errors)){
 
 
                    $user->setPassword($authService->better_crypt(md5($params['password']['first']), 15));
 
                    $em->flush();
 
 
                    $notification = new NotificationEntity();
 
                    $notification->setType('Password Reset');
 
                    $notification->setMessage('Password has successfully updated.');
 
                    $notification->setUser($user);
 
                    $em->persist($notification);
 
                    $em->flush();
 
 
                    $this->get('session')->getFlashBag()->add('success_messages', "Password changed successfully. You’re all set!");
 
                    return $this->redirect($this->generateUrl('home_login'),302);
 
                } else {
 
 
                    foreach($errors as $error) {
 
                        $this->get('session')->getFlashBag()->add('error_messages', $error);
 
                    }
 
                }
 
 
            }  else {
 
 
                $this->get('session')->getFlashBag()->add('error_messages', "Invalid or expired verification code.");
 
            }
 
 
        }
 
 
        return $this->render('Home/reset_password.html.twig', array(
 
           'title' => 'Reset Password - AiETF Token',
 
            'token' => $token,
 
            'refCode' => $refCode));
 
    }
 
 
   #[Route("/logout", name:"home_logout")]
 
    public function logoutAction(AuthService $authService) {
 
 
        
 
        if(!$authService->isLoggedIn()) return $authService->redirectToLogin();
 
 
        $this->get('session')->clear();
 
 
        if(isSet($_COOKIE['userId'])) {
 
            unset($_COOKIE['userId']);
 
            setcookie('userId', null, -1, '/');
 
        }
 
 
        if(isSet($_COOKIE['email'])) {
 
            unset($_COOKIE['email']);
 
            setcookie('email', null, -1, '/');
 
        }
 
 
        return $authService->redirectToLogin();
 
    }
 
 
 
   #[Route("/terms", name:"home_terms")]
 
    public function termsAction(Request $request){
 
 
       
 
        $em = $this->getDoctrine()->getManager();
 
      
 
 
      return $this->render('Home/terms.html.twig');
 
    }
 
    
 
    
 
   #[Route("/cookies", name:"home_cookies")]
 
    public function cookiesAction(Request $request){
 
 
       
 
        $em = $this->getDoctrine()->getManager();
 
      
 
 
      return $this->render('Home/cookies.html.twig');
 
    }
 
 
   #[Route("/privacy", name:"home_privacy")]
 
    public function privacyAction(Request $request){
 
 
        $refCode = $request->get('r') ? $request->get('r') : '';
 
 
        $em = $this->getDoctrine()->getManager();
 
      
 
 
      return $this->render('Home/privacy.html.twig');
 
    }
 
 
 
#[Route("/whitepaper", name:"home_whitepaper")]
 
     public function whitepaperAction(Request $request){
 
        $filename = "Whitepaper.pdf";
 
        return new BinaryFileResponse(__DIR__  .'/../../public/' . $filename);
 
    }
 
 
 
   #[Route("/token", name:"home_token")]
 
    public function tokenAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
        $em = $this->getDoctrine()->getManager();
 
      
 
 
      return $this->render('Home/token.html.twig');
 
    }
 
 
    #[Route("/contact", name:"home_contact_us")]
 
    public function contact_usAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      if($request->getMethod() === 'POST'){
 
 
        $supportMsg  = $request->get('field');
 
 
        $errors = array();
 
 
        if(empty($supportMsg['name'])){ $errors[] = 'Please put your name.'; }
 
        if(empty($supportMsg['email'])){ $errors[] = 'Please put your email.'; }
 
      //  if(empty($supportMsg['phone'])){ $errors[] = 'Please put your phone no.'; }
 
        if(empty($supportMsg['message'])){ $errors[] = 'Please put your Message.'; }
 
 
        if(!count($errors)){
 
 
            $this->get('session')->getFlashBag()->add('success_messages', "Message received! Our team will respond as soon as possible.");
 
            $msg = $this->renderView('Email/support_msg.html.twig', array('msg' =>  $supportMsg));
 
            
 
            $this->sendSupportMail( $msg,'New Support Message');
 
        } else {
 
 
           foreach($errors as $error) {
 
                $this->get('session')->getFlashBag()->add('error_messages', $error);
 
            }
 
        }
 
      }
 
 
       return $this->redirect( $this->generateUrl('home'), 302);
 
 
    }
 
 
    #[Route("/faq", name:"home_faq")]
 
    public function faqAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/faq.html.twig' , array(
 
            'refCode' => $refCode));
 
    }
 
 
    #[Route("/news", name:"home_news")]
 
    public function newsAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/news.html.twig' , array(
 
            'refCode' => $refCode));
 
    }
 
 
   #[Route("/project_bonuses", name:"home_project_bonuses")]
 
    public function projectBonusesAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/project_bonuses.html.twig' , array(
 
            'refCode' => $refCode));
 
    }
 
 
   #[Route("/roadmap", name:"home_roadmap")]
 
    public function roadmapAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/roadmap.html.twig' , array(
 
            'refCode' => $refCode));
 
    }
 
 
   #[Route("/about", name:"home_about")]
 
    public function aboutAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/about.html.twig' , array(
 
            'refCode' => $refCode));
 
    }
 
 
 
   #[Route("/blog", name:"home_blog")]
 
    public function blogAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/blog.html.twig' , array(
 
            'refCode' => $refCode));
 
    }
 
 
 
 
 
   #[Route("/AiPay-is-live", name:"home_blog1")]
 
    public function blog1Action(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/blog1.html.twig' , array(
 
            'refCode' => $refCode));
 
    }
 
 
 
 
 
   #[Route("/gleancoinisborn", name:"home_blogpost")]
 
    public function gleancoinisbornAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/gleanisborn.html.twig' , array(
 
            'refCode' => $refCode));
 
    }
 
 
 
 
   #[Route("/howto", name:"home_blogpost1")]
 
    public function howtoAction(Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/howto.html.twig' , array(
 
            'refCode' => $refCode));
 
    }
 
 
 
 
 
   #[Route("/home1", name:"home_home1")]
 
    public function newhomeAction(Request $request){
 
        
 
         $em = $this->getDoctrine()->getManager();
 
        $stagePurchase = $em->getRepository(UserOrderTokenEntity::class)->stagePurchase();
 
        $stagePurchaseGroupByUser = $em->getRepository(UserOrderTokenEntity::class)->completedOrdersCtrGroupByUser();
 
        $totalOrder  = $stagePurchase['stagePurchase'];
 
        $totalUser = $em->getRepository(UserEntity::class)->userCount();  
 
        
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/home.html.twig', [
 
            'controller_name' => 'HomeController',
 
            'totalOrder' => $totalOrder,
 
            'totalUser' => $totalUser,
 
            'totalUserWithCompletedOrder' => count($stagePurchaseGroupByUser)
 
        ]);
 
    }
 
 
 
 
    #[Route("/news/article/{title}", name:"home_news_article")]
 
    public function news_articleAction($title, Request $request){
 
      $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/news_article.html.twig',array('article' => $title,'refCode' => $refCode));
 
    }
 
 
   #[Route("/stake_mining", name:"home_stake_mining")]
 
    public function stake_miningAction(Request $request){
 
 
        $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/stake_mining.html.twig',array('article' => 'What is Stake Mining?','refCode' => $refCode));
 
    
 
    }
 
 
   #[Route("/mobile_app", name:"home_mobile_app")]
 
    public function mobile_appAction(Request $request){
 
 
        $refCode = $request->get('r') ? $request->get('r') : '';
 
 
      return $this->render('Home/mobile_app.html.twig',array('refCode' => $refCode));
 
    
 
    }
 
 
    #[Route("/send/test_email", name:"home_send_test_email")]
 
    public function send_test_emailAction(){
 
 
       $msg = $this->renderView('Email/send_test_email.html.twig');
 
       $this->get('fullMoon.mailService')->sendMail('The LTCB Launch Was A Success!', $msg, '[email protected]');
 
 
      die("Message Send....");
 
    }
 
 
    private function generateReferralCode($length = 6) {
 
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 
        $charactersLength = strlen($characters);
 
        $randomString = '';
 
        $em = $this->getDoctrine()->getManager();
 
        for ($i = 0; $i < $length; $i++) {
 
            $randomString .= $characters[rand(0, $charactersLength - 1)];
 
        }
 
 
        $referralCode = $em->getRepository(UserEntity::class)->findOneBy(array('referralCode' => $randomString));
 
        if($referralCode){
 
            $this->generateReferralCode();
 
        }
 
 
        return $randomString;
 
    }
 
 
    private function generateExchangePhrase($length = 26) {
 
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 
        $charactersLength = strlen($characters);
 
        $randomString = '';
 
        $em = $this->getDoctrine()->getManager();
 
        for ($i = 0; $i < $length; $i++) {
 
            $randomString .= $characters[rand(0, $charactersLength - 1)];
 
        }
 
 
        $exchangePhrase = $em->getRepository(UserEntity::class)->findOneBy(array('exchangePhrase' => $randomString));
 
        if($exchangePhrase){
 
            $this->generateExchangePhrase();
 
        }
 
 
        return $randomString;
 
    }
 
 
 
 
    private function generateWalletAddress($length = 16) {
 
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 
        $charactersLength = strlen($characters);
 
        $randomString = '';
 
        $em = $this->getDoctrine()->getManager();
 
        for ($i = 0; $i < $length; $i++) {
 
            $randomString .= $characters[rand(0, $charactersLength - 1)];
 
        }
 
 
        $walletAddress = $em->getRepository(UserEntity::class)->findOneBy(array('walletAddress' => $randomString));
 
        if($walletAddress){
 
            $this->generateWalletAddress();
 
        }
 
 
        return $randomString;
 
    }
 
 
    private function generateForgotPasswordVerificationCode($length = 4) {
 
        $characters = '0123456789';
 
        $charactersLength = strlen($characters);
 
        $randomString = '';
 
        $em = $this->getDoctrine()->getManager();
 
        for ($i = 0; $i < $length; $i++) {
 
            $randomString .= $characters[rand(0, $charactersLength - 1)];
 
        }
 
 
        return $randomString;
 
    }
 
 
    private function getUserIp()
 
    {
 
        // Get real visitor IP behind CloudFlare network
 
        if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
 
            $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
 
            $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
 
        }
 
        $client  = @$_SERVER['HTTP_CLIENT_IP'];
 
        $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
 
        $remote  = $_SERVER['REMOTE_ADDR'];
 
 
        if(filter_var($client, FILTER_VALIDATE_IP))
 
        {
 
            $ip = $client;
 
        }
 
        elseif(filter_var($forward, FILTER_VALIDATE_IP))
 
        {
 
            $ip = $forward;
 
        }
 
        else
 
        {
 
            $ip = $remote;
 
        }
 
 
        return $ip;
 
    }
 
 
    private function validate_email($email){
 
 
        $params = array(
 
          "address" => $email
 
        );
 
        $ch = curl_init();
 
 
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 
        curl_setopt($ch, CURLOPT_USERPWD, 'api:899a34e2ae5642471efeb2cc85d68a70-28d78af2-83177aee');
 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
 
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
 
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
 
        curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v4/address/validate');
 
        $result = curl_exec($ch);
 
        curl_close($ch);
 
 
        return json_decode($result, true);
 
 
    }
 
 
       #[Route("/r/{refCode}", name:"home_referral")]
 
    public function referral(Request $request, $refCode)
 
    {
 
 
        $em = $this->getDoctrine()->getManager();
 
 
        if(!empty($refCode)){
 
            $session = $this->container->get('session');
 
            $session->set('refCode' , $refCode);
 
        }
 
 
 
        return $this->redirect($this->generateUrl('home') , 302);
 
    }
 
 
    private function byPass2fa($user){
 
 
        $em = $this->getDoctrine()->getManager();
 
 
        
 
        $user->setStatus('Active');
 
        $user->setReferralCode($this->generateReferralCode());
 
        $user->setExchangePhrase($this->generateExchangePhrase());
 
        $em->flush();
 
 
        $regBonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'SB'));
 
 
        //This is for user regisration bonus.
 
        if($regBonus){
 
               $userRegBonus = new UserBonusTokenEntity();
 
               $userRegBonus->setUser($user);
 
               $userRegBonus->setBonus($regBonus);
 
               $userRegBonus->setAmount($regBonus->getBonusToken());
 
               $em->persist($userRegBonus);
 
               $em->flush();
 
        }
 
 
        $referral = $user->getReferral();
 
            if($referral){
 
               $referral->setStatus('Completed');
 
               $primarySignUpBonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'PR'));
 
               $firstReferralBonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'FRB'));
 
 
               $firstReferrer = $referral->getReferrer();
 
              
 
               if(!$firstReferrer->getHasFirstReferral()){
 
                   $bonus = new UserBonusTokenEntity();
 
                   $bonus->setUser($referral->getReferrer());
 
                   $bonus->setBonus($firstReferralBonus);
 
                   $bonus->setAmount($firstReferralBonus->getBonusToken());
 
                   $bonus->setReferral($referral);
 
                   $em->persist($bonus);
 
 
                   $firstReferrer->setHasFirstReferral(true);
 
                   $em->flush();
 
 
                   $notification = new NotificationEntity();
 
                   $notification->setType('First Referral Bonus');
 
                   $notification->setMessage('You just have received ' . $firstReferralBonus->getBonusToken() . ' Token for your first referral.');
 
                   $notification->setUser($referral->getReferrer());
 
                   $em->persist($notification);
 
                   $em->flush();
 
               }
 
 
               if($primarySignUpBonus){
 
 
                   $primaryUserBonus = new UserBonusTokenEntity();
 
                   $primaryUserBonus->setUser($referral->getReferrer());
 
                   $primaryUserBonus->setBonus($primarySignUpBonus);
 
                   $primaryUserBonus->setAmount($primarySignUpBonus->getBonusToken());
 
                   $primaryUserBonus->setReferral($referral);
 
                   $em->persist($primaryUserBonus);
 
                   $em->flush();
 
 
                   $notification = new NotificationEntity();
 
                   $notification->setType('Level 1 Referral');
 
                   $notification->setMessage('You have a new Level 1 Referral');
 
                   $notification->setUser($referral->getReferrer());
 
                   $em->persist($notification);
 
                   $em->flush();
 
 
                //   $msg = $this->renderView('Email/referral.html.twig');
 
                 //  $this->get('fullMoon.mailService')->sendMail('You have a new referral at LTCB', $msg, $referral->getReferrer()->getEmail());
 
               }
 
 
 
               $referralReferrent = $referral->getReferrer();
 
               $secondaryReferral = $referralReferrent->getReferral();
 
 
               if($secondaryReferral){
 
 
                   $secondarySignUpBonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'SR'));
 
 
                   if($secondarySignUpBonus){
 
 
                       $secondaryUserSignUpBonus = new UserBonusTokenEntity();
 
                       $secondaryUserSignUpBonus->setUser($secondaryReferral->getReferrer());
 
                       $secondaryUserSignUpBonus->setBonus($secondarySignUpBonus);
 
                       $secondaryUserSignUpBonus->setAmount($secondarySignUpBonus->getBonusToken());
 
                       $secondaryUserSignUpBonus->setReferral($referral);
 
                       $secondaryUserSignUpBonus->setSecondaryReferral($secondaryReferral);
 
                       $em->persist($secondaryUserSignUpBonus);
 
                       $em->flush();
 
 
                      $notification = new NotificationEntity();
 
                      $notification->setType('Level 2 Referral');
 
                      $notification->setMessage('You have a new Level 2 Referral');
 
                      $notification->setUser($secondaryReferral->getReferrer());
 
                      $em->persist($notification);
 
                      $em->flush();
 
 
                     //  $msg = $this->renderView('Email/referral.html.twig');
 
                      // $this->get('fullMoon.mailService')->sendMail('You have a new referral at ', $msg, $secondaryReferral->getReferrer()->getEmail());
 
                   }
 
 
                  $secondaryReferrent = $secondaryReferral->getReferrer();
 
                  $thirdLevelReferral = $secondaryReferrent->getReferral();
 
 
                  if($thirdLevelReferral){
 
 
                       $bonus = $em->getRepository(BonusEntity::class)->findOneBy(array('code' => 'TR'));
 
 
                       if($bonus){
 
 
                           $thirdLevelRefBonus = new UserBonusTokenEntity();
 
                           $thirdLevelRefBonus->setUser($thirdLevelReferral->getReferrer());
 
                           $thirdLevelRefBonus->setBonus($bonus);
 
                           $thirdLevelRefBonus->setAmount($bonus->getBonusToken());
 
                           $thirdLevelRefBonus->setReferral($referral);
 
                           $thirdLevelRefBonus->setSecondaryReferral($secondaryReferral);
 
                           $thirdLevelRefBonus->setThirdReferral($thirdLevelReferral);
 
                           $em->persist($thirdLevelRefBonus);
 
                           $em->flush();
 
 
                           $notification = new NotificationEntity();
 
                           $notification->setType('Level 3 Referral');
 
                           $notification->setMessage('You have a new Level 3 Referral');
 
                           $notification->setUser($thirdLevelReferral->getReferrer());
 
                           $em->persist($notification);
 
                           $em->flush();
 
 
                          // $msg = $this->renderView('Email/referral.html.twig');
 
                           //$this->get('fullMoon.mailService')->sendMail('You have a new referral', $msg, $thirdLevelReferral->getReferrer()->getEmail());
 
                       }
 
                   }
 
               }
 
            }
 
 
          $this->get('session')->clear();
 
 
            $em->flush();
 
    }
 
 
    
 
    private function generateCardNo($length = 12) {
 
       
 
        $characters = '0123456789';
 
        $charactersLength = strlen($characters);
 
        $randomString = '5163';
 
 
        $em = $this->getDoctrine()->getManager();
 
        for ($i = 0; $i < $length; $i++) {
 
            $randomString .= $characters[rand(0, $charactersLength - 1)];
 
        }
 
 
        $orderTokenAddressExists = $em->getRepository(UserEntity::class)->findOneBy(array('cardNo' => $randomString));
 
        if($orderTokenAddressExists){
 
            $this->generateRandomString();
 
        }
 
 
        return $randomString;
 
    }
 
 
   #[Route("/sendmail", name:"home_sendmail")]
 
    public function sendMail($user, $email, $subject){
 
 
         $mail = new PHPMailer(true);
 
 
        //Server settings
 
        $mail->SMTPDebug = false;                  //Enable verbose debug output
 
        $mail->isSMTP();                                            //Send using SMTP
 
         $mail->Host       = 'xrpverse.app';          //Set the SMTP server to send through
 
        $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
 
        $mail->Username   = '[email protected]';                  //SMTP username
 
        $mail->Password   = 'Wakeke123!';   
 
        $mail->SMTPSecure = 'ssl';                              //Enable implicit TLS encryption
 
        $mail->Port       = 465;   
 
 
        //Recipients
 
        $mail->setFrom('[email protected]');
 
        $mail->addAddress($user->getEmail());
 
 
        //Content
 
        $mail->isHTML(true);                                  //Set email format to HTML
 
        $mail->Subject = $subject;
 
        $mail->Body    = $email;
 
 
        $mail->send();
 
    }
 
 
     private function sendSupportMail($email, $subject){
 
 
         $mail = new PHPMailer(true);
 
 
       //Server settings
 
        $mail->SMTPDebug = false;                  //Enable verbose debug output
 
        $mail->isSMTP();                                            //Send using SMTP
 
        $mail->Host       = 'mail.aipayplatform.com';          //Set the SMTP server to send through
 
        $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
 
        $mail->Username   = '[email protected]';                  //SMTP username
 
        $mail->Password   = 'Wakeke123!!';   
 
        $mail->SMTPSecure = 'ssl';                              //Enable implicit TLS encryption
 
        $mail->Port       = 465;   
 
 
        //Recipients
 
        $mail->setFrom('[email protected]');
 
        $mail->addAddress('[email protected]');
 
 
 
        //Content
 
        $mail->isHTML(true);                                  //Set email format to HTML
 
        $mail->Subject = $subject;
 
        $mail->Body    = $email;
 
 
        $mail->send();
 
    }
 
}