<?php

namespace Leadlion\Autogedal\Observer;

use Magento\Framework\Event\ObserverInterface;

/**
 * Mark item as deleted to prevent it's auto-addition
 *
 * event name: sales_quote_remove_item
 * observer scope: frontend, webapi_rest
 */
class QuoteRemoveItemObserver implements ObserverInterface
{

    const CHECKOUT_ROUTER = 'amasty_checkout';
    const CHECKOUT_DELETE = 'remove-item';

    /**
     * @var \Amasty\Promo\Helper\Item
     */
    private $promoItemHelper;

    /**
     * @var \Amasty\Promo\Model\Registry
     */
    private $promoRegistry;

    /**
     * @var \Magento\Framework\App\RequestInterface
     */
    private $_request;

    public function __construct(
        \Amasty\Promo\Helper\Item $promoItemHelper,
        \Amasty\Promo\Model\Registry $promoRegistry,
        \Magento\Framework\App\RequestInterface $request
    ) {
        $this->promoItemHelper = $promoItemHelper;
        $this->promoRegistry = $promoRegistry;
        $this->_request = $request;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        /** @var \Magento\Quote\Model\Quote\Item $item */
        $item = $observer->getEvent()->getQuoteItem();
        
        $itemParam = $this->_request->getParam('item');
        if ($itemParam &&
            isset($itemParam[$item->getId()]) &&
            isset($itemParam[$item->getId()]['action']) &&
            $itemParam[$item->getId()]['action'] == 'remove'
        ) {
            if (!$item->getParentId()
                && $this->promoItemHelper->isPromoItem($item)
            ) {
                $this->promoRegistry->deleteProduct($item);
            }
        }
    }
}
