<?php
declare(strict_types=1);

namespace Autogedal\Extend\Controller\Payment;

use Magento\Framework\App\ResponseInterface;
use Magento\Sales\Model\Order;

class Guest extends \Netopia\Netcard\Controller\Payment\Guest
{
    /**
     * Execute action based on request and return result
     *
     * @return \Magento\Framework\Controller\ResultInterface|ResponseInterface
     * @throws \Magento\Framework\Exception\NotFoundException
     */
    public function execute()
    {
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $resultPage = $this->resultPageFactory->create();
        $orderId = $this->_request->getParam('orderId');
        $code = $this->_request->getParam('code');
        $order = $this->_orderFactory->load($orderId);

        /**
         * To manage Reject Payment on Guest User
         */
        if ($order->getStatus() === 'custom_neplatit') {
            $msg = 'Plata nu a fost finalizata!';
            $msg .= " | " . current($order->getAllStatusHistory())->getComment();
            $this->messageManager->addError($msg);

            /**
             * Reload cart here start
             */
            $_checkoutSession = $objectManager->create('\Magento\Checkout\Model\Session');
            $_quoteFactory = $objectManager->create('\Magento\Quote\Model\QuoteFactory');
            $quote = $_quoteFactory->create()->loadByIdWithoutStore($order->getQuoteId());

            if ($quote->getId()) {
                $quote->setIsActive(true)->setReservedOrderId(null)->save();
                $_checkoutSession->replaceQuote($quote);
                $_checkoutSession->setQuoteId($quote->getId());
            }

            /**
             * Reload cart here End
             */
            return $this->resultRedirectFactory->create()->setPath('checkout/cart');
        }

        if (md5($order->getCustomerEmail()) != $code) {
            $msg = 'Eroare, accesul nu este permis';
            $this->messageManager->addError($msg);
            return $this->resultRedirectFactory->create()->setPath('checkout/cart');
        }

        if (!$order->getCustomerIsGuest()) {
            $msg = 'Ai deja un cont. Pentru detalii trebuie sa te autentifici';
            $this->messageManager->addError($msg);
            return $this->resultRedirectFactory->create()->setPath('checkout/cart');
        }

        $customerSession = $objectManager->get('Magento\Customer\Model\Session');
        if ($customerSession->isLoggedIn()) {
            return $this->resultRedirectFactory->create()->setPath('netopia/payment/success/?&orderId=' . $orderId);
        }


        if (!$order->getEmailSent()) {
            $emailSender = $objectManager->create('\Magento\Sales\Model\Order\Email\Sender\OrderSender');
            $emailSender->send($order);
        }

        $this->_eventManager->dispatch(
            'checkout_onepage_controller_success_action',
            ['order_ids' => [$orderId]]
        );

        return $resultPage;
    }
}
