<?php

namespace Leadlion\SolicitaMontaj\Observer;

use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Message\ManagerInterface;
use Magento\Checkout\Model\Session;
use \Magento\Framework\Exception\NoSuchEntityException;

class SetOrderMontaj implements ObserverInterface
{
    protected $messageManager;
    /**
     * @var Session
     */
    protected $checkoutSession;
    private \Magento\Store\Model\StoreManagerInterface $_storeManager;
    private \Magento\Catalog\Api\ProductRepositoryInterface $_productRepository;

    public function __construct(
        private \Magento\Catalog\Api\CategoryRepositoryInterface $categoryRepository,
        \Magento\Quote\Model\QuoteFactory $quoteFactory,
        ManagerInterface $messageManager,
        private \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
        private \Magento\Framework\Session\SessionManager $session,
        Session $checkoutSession,
        private \Leadlion\Autogedal\Helper\Config $helper,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
    )
    {
        $this->categoryRepository = $categoryRepository;
        $this->messageManager = $messageManager;
        $this->orderRepository = $orderRepository;
        $this->session = $session;
        $this->checkoutSession = $checkoutSession;
        $this->helper = $helper;
        $this->_storeManager = $storeManager;
        $this->_productRepository = $productRepository;
    }


    public function execute(Observer $observer)
    {
        $visible = false;
        $order = $observer->getEvent()->getOrder();
        $categories = $this->helper->getConfig('leadlion/solicita_montaj/category_montaj', $this->_storeManager->getStore()->getId());
        $categories = explode(",", $categories);
        $cartData =  $observer->getEvent()->getQuote()->getAllVisibleItems();

        if($cartData):
            foreach($cartData as $item):
                $product = $this->getProductById($item->getProductId());
                if($product):
                    $productCategory = $product->getCategoryIds();
                    foreach($productCategory as $category):
                        $categoryData = $this->getCategory($category);
                        if($categoryData):
                            if($categoryData->getIsActive()):
                                if(in_array($categoryData->getName() , $categories)):
                                    $visible = true;
                                endif; 
                            endif;
                        endif;
                    endforeach;
                endif;
            endforeach;
        endif;
        $oscData = $this->checkoutSession->getOscData();
        
        if(isset($oscData['montaj']) && $oscData['montaj'] && $visible):
            $order->setMontaj('Montaj autorizat');
            try{
                $order->save();
            } catch (\Magento\Framework\Exception\LocalizedException $e) {
                $this->messageManager->addErrorMessage($e->getMessage());
            } catch (\Exception $e) {
                $this->messageManager->addErrorMessage(__('We can\'t save the AUTHORIZED ASSEMBLY service.Please contact the suport.'));
            }
        endif;
        
        $this->session->unsMontaj();
    }
    public function getProductById($id)
    {        
        try {
            return $this->_productRepository->getById($id);
        } catch (NoSuchEntityException $ex) {
            return null;
        }
    }
    public function getCategory($category)
    {
        try {
            return $this->categoryRepository->get($category);
        } catch (NoSuchEntityException $ex) {
            return null;
        }
    }
}