<?php

namespace Lc\ShopBundle\Services\Order;


use Lc\ShopBundle\Context\OrderShopInterface;
use Lc\ShopBundle\Model\OrderStatus;

trait OrderUtilsCartTrait
{
        public function getCartByUserOrCreateIt($user){
                $newOrderShop= $this->em->getRepository(OrderShopInterface::class)->findCartCurrent(['user' => $user]);
                if ($newOrderShop === null) {
                        $newOrderShop = $this->createOrderShop(array(
                                'user' => $user,
                                'merchant' => $this->merchantUtils->getMerchantUser()
                        ));
                }

                return $newOrderShop;
        }


        public function getCartCurrent($createIfNotExist = false)
        {
                $paramsSearchOrderShop = [];

                $user = $this->security->getUser();
                $visitor = $this->userUtils->getVisitorCurrent();

                $orderShop = null;
                $orderShopUser = null;
                $orderShopVisitor = null;

                if ($user) {
                        $orderShopUser = $this->orderShopRepo->findCartCurrent([
                                'user' => $user
                        ]);
                }

                if ($visitor) {
                        $orderShopVisitor = $this->orderShopRepo->findCartCurrent([
                                'visitor' => $visitor
                        ]);
                }

                if ($orderShopUser || $orderShopVisitor) {
                        // merge
                        if ($orderShopUser && $orderShopVisitor && $orderShopUser != $orderShopVisitor
                                && $orderShopVisitor->getOrderProducts() && count($orderShopVisitor->getOrderProducts())
                                && $orderShopUser->getOrderStatus()->getAlias() == OrderStatus::ALIAS_CART) {
                                $orderShop = $this->mergeOrderShops($orderShopUser, $orderShopVisitor);
                                $this->utils->addFlash('success', "Votre panier visiteur vient d'être fusionné avec votre panier client.");
                        } else {
                                $orderShop = ($orderShopUser) ? $orderShopUser : $orderShopVisitor;
                        }
                        // set user
                        if ($orderShop && $user && !$orderShop->getUser()) {
                                $orderShop->setUser($user);
                                $orderShop->setVisitor(null) ;
                                $this->em->persist($orderShop);
                                $this->em->flush();
                        }
                }

                if($createIfNotExist && !$orderShop) {
                        $orderShop = $this->createOrderShop([
                                'user' => $user,
                                'visitor' => $visitor,
                                'merchant' => $this->merchantUtils->getMerchantCurrent()
                        ]);
                }

                return $orderShop;
        }


        public function isCartAllowToBeOrder($order){
                return true;
        }
}
