<?php
 
 
namespace App\Controller;
 
 
 
use FOS\UserBundle\Controller\RegistrationController as BaseController;
 
use Symfony\Component\HttpFoundation\Request;
 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
use Symfony\Component\Routing\Annotation\Route;
 
use Symfony\Component\HttpFoundation\Session\SessionInterface;
 
use App\Controller\MaintenanceController;
 
use FOS\UserBundle\Form\Factory\FactoryInterface;
 
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 
use FOS\UserBundle\Model\UserManagerInterface;
 
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
 
use Doctrine\ORM\EntityManagerInterface;
 
use App\Service\UserService;
 
 
use App\Entity\User;
 
use App\Entity\CartCoupon;
 
 
class RegistrationController extends BaseController {
 
 
    public function __construct(EventDispatcherInterface $eventDispatcher, FactoryInterface $formFactory, UserManagerInterface $userManager, TokenStorageInterface $tokenStorage, SessionInterface $session, EntityManagerInterface $em, UserService $user)
 
    {
 
        $this->eventDispatcher = $eventDispatcher;
 
        $this->formFactory     = $formFactory;
 
        $this->userManager     = $userManager;
 
        $this->tokenStorage    = $tokenStorage;
 
 
        $this->session         = $session;
 
        $this->em              = $em;
 
        $this->userServ        = $user;
 
 
        parent::__construct($eventDispatcher, $formFactory, $userManager, $tokenStorage);
 
    }
 
    /**
 
     * @Route(
 
     *      "/register",
 
     *  )
 
     *
 
     */
 
    public function registerAction(Request $request)
 
    {
 
      try {
 
        if (isset($_GET["i"])) {
 
          $i=$_GET["i"];
 
          if ($i == "0da96206511c3297fc9dfe3ee6602bbd") {
 
            $this->session->set("is_quebecor_invite", "yes");
 
          }
 
        }
 
      } catch (\Exception $e) {
 
        // not important, ignore
 
      }
 
 
      try {
 
          return parent::registerAction($request);
 
      } catch (NotFoundHttpException $e) {
 
          return $this->redirectToRoute('fos_user_security_login');
 
      }
 
    }
 
    /**
 
     * @Route(
 
     *      "/register/confirm/{token}",
 
     *  )
 
     *
 
     */
 
    public function confirmAction(Request $request,$token){
 
        try {
 
          $is_quebecor_invite = $this->session->get("is_quebecor_invite");
 
          if ($is_quebecor_invite == "yes") {
 
            $user = $this->em->getRepository(User::class)->findOneBy(["confirmationToken"=>$token]);
 
            if ($user) {
 
              $email = $user->getEmail();
 
              $email_domain = explode("@",$email);
 
              if (isset($email_domain[1])) {
 
                $email_domain = strtolower(trim($email_domain[1]));
 
 
                $accepted_domains = [
 
                  '1secmail.com',
 
                  'owasp.org',
 
                  'quebecormedia.com',
 
                  'agenceqmi.ca',
 
                  'ceceditions.com',
 
                  'fibrenoir.ca',
 
                  'gestev.com',
 
                  'tva.ca',
 
                  'musicor.quebecor.com',
 
                  'select.quebecor.com',
 
                  'quebecor.com',
 
                  'qmisales.ca',
 
                  'remparts.ca',
 
                  'sette.com',
 
                  'sogides.com',
 
                  'groupehomme.com',
 
                  'messageries-adp.com',
 
                  'videotron.com',
 
                  'mels-studios.com',
 
                  'lessuperclub.com',
 
                ];
 
 
                if (in_array($email_domain, $accepted_domains)) {
 
                  /*
 
                  create 10$ + 5$ coupon
 
                  */
 
                  $coupon_code_10 = substr('C-'.md5(uniqid()), 0, 12);
 
                  $coupon = new CartCoupon();
 
                  $coupon->setOneTimeOnly(false);
 
                  $coupon->setType(2);
 
                  $coupon->setAmount(10);
 
                  $coupon->setCode($coupon_code_10);
 
                  $coupon->setForUser($user);
 
                  $coupon->setDateFrom(new \DateTime());
 
                  $coupon->setDateTo(new \DateTime("+1 year"));
 
                  $this->em->persist($coupon);
 
                  $this->em->flush();
 
 
                  $coupon_code_5 = substr('C-'.md5(uniqid()), 0, 12);
 
                  $coupon = new CartCoupon();
 
                  $coupon->setOneTimeOnly(false);
 
                  $coupon->setType(2);
 
                  $coupon->setAmount(5);
 
                  $coupon->setCode($coupon_code_5);
 
                  $coupon->setForUser($user);
 
                  $coupon->setDateFrom(new \DateTime());
 
                  $coupon->setDateTo(new \DateTime("+1 year"));
 
                  $this->em->persist($coupon);
 
                  $this->em->flush();
 
 
                  $email_body = $this->get('twig')->render('emails/welcomeQuebecor.html.twig', array(
 
                    'coupon_code_10' => $coupon_code_10,
 
                    'coupon_code_5' => $coupon_code_5,
 
                  ));
 
                  $this->userServ->sendEmail('Vos coupons rabais de Maturin!', $email_body, false, $email);
 
                }
 
              }
 
            }
 
          }
 
          // dd($response);
 
        } catch (\Exception $e) {
 
          // not important, ignore
 
          // dd($e->getMessage());
 
        }
 
 
        try {
 
            return parent::confirmAction($request, $token);
 
        } catch (NotFoundHttpException $e) {
 
            return $this->redirectToRoute('fos_user_security_login');
 
        }
 
    }
 
 
 
     /**
 
     * @Route(
 
     *      "/login/coupon/marketing",
 
     *  )
 
     *
 
     */
 
    public function loginAction(Request $request)
 
    {
 
 
 
      try {
 
        if (isset($_GET["c"])) {
 
          //dd("here");
 
          $coupon=$_GET["c"];
 
          if ($coupon) {
 
            $this->session->set("coupon_marketing", $coupon);
 
          }
 
        }
 
      } catch (\Exception $e) {
 
        // not important, ignore
 
      }
 
      return $this->redirectToRoute('fos_user_security_login');
 
 
    }
 
 
}