<?php

declare(strict_types=1);

namespace Autogedal\Extend\Observer;

use Magento\Checkout\Model\Session as CheckoutSession;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Message\ManagerInterface;
use Magento\Sales\Api\OrderManagementInterface;
use Magento\Sales\Model\OrderFactory;

class CancelPendingLeanpayOnCartLoad implements ObserverInterface
{
    private const LEANPAY_STATUS = 'leanpay_pending';
    private const LEANPAY_METHOD = 'leanpay';

    public function __construct(
        private readonly CheckoutSession $checkoutSession,
        private readonly OrderFactory $orderFactory,
        private readonly OrderManagementInterface $orderManagement,
        private readonly ManagerInterface $messageManager,
    ) {}

    public function execute(Observer $observer): void
    {
        $incrementId = $this->checkoutSession->getLastRealOrderId();
        if (!$incrementId) {
            return;
        }

        $order = $this->orderFactory->create()->loadByIncrementId($incrementId);
        if (!$order->getId()) {
            return;
        }

        if ($order->getStatus() !== self::LEANPAY_STATUS
            || $order->getPayment()->getMethod() !== self::LEANPAY_METHOD
        ) {
            return;
        }

        $this->orderManagement->cancel((int) $order->getId());
        $this->checkoutSession->restoreQuote();
        $this->messageManager->addNoticeMessage(
            __('Plata nu a fost finalizata. Cosul a fost restaurat.')
        );
    }
}
