<?php

namespace Lc\ShopBundle\Controller\Frontend ;

use App\Form\Frontend\OrderProductsType;
use Doctrine\ORM\EntityManagerInterface;
use Lc\ShopBundle\Context\MerchantUtilsInterface;
use Lc\ShopBundle\Context\OrderProductInterface;
use Lc\ShopBundle\Context\OrderUtilsInterface;
use Lc\ShopBundle\Context\ProductFamilyInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Security;

class CartController extends BaseController
{
        protected $orderUtils ;
        protected $productFamilyRepository ;
        protected $orderProductRepository ;

        protected $productFamily ;
        protected $orderProducts = [] ;


        public function __construct(EntityManagerInterface $em, Security $security, MerchantUtilsInterface $merchantUtils, OrderUtilsInterface $orderUtils)
        {
                parent::__construct($em, $security, $merchantUtils);
                $this->orderUtils = $orderUtils ;
                $this->productFamilyRepository = $this->em->getRepository($this->em->getClassMetaData(ProductFamilyInterface::class)->getName()) ;
                $this->orderProductRepository = $this->em->getRepository($this->em->getClassMetaData(OrderProductInterface::class)->getName()) ;
        }

        public function addProductFamily(Request $request)
        {
                $return = [] ;
                $data = $request->request->all() ;
                if(isset($data['order_products']['id_product_family'])) {
                        $idProductFamily = $data['order_products']['id_product_family'] ;
                        $this->productFamily = $this->productFamilyRepository->find($idProductFamily) ;
                        if($this->productFamily) {
                                $form = $this->createForm(OrderProductsType::class, ['id_product_family' => $this->productFamily->getId()]);
                                $form->handleRequest($request);

                                if ($form->isSubmitted() && $form->isValid()) {
                                        $orderShop = $this->orderUtils->getCartCurrent() ;
                                        $data = $form->getData() ;
                                        foreach($data as $orderProduct) {
                                                if($orderProduct instanceof OrderProductInterface) {
                                                        $this->orderUtils->addOrderProduct($orderShop, $orderProduct) ;
                                                        if($orderProduct->getQuantityOrder() > 0) {
                                                                $this->orderProducts[] = $orderProduct ;
                                                        }
                                                }
                                        }
                                }
                        }
                }

                return new JsonResponse($return) ;
        }

}
