<?php

namespace Autogedal\TbiBank\Plugin;

use Autogedal\TbiBank\Model\PaymentMethod;
use Autogedal\TbiBank\Model\ApprovalAccounting;
use Autogedal\TbiBank\Model\ApprovalConfig;
use Magento\Framework\Event\Observer;
use Magento\Sales\Model\Order;
use TbiBank\FusionPay\Observer\SetDefaultTbiStatus;

/** Keep every TBI order in the waiting status until the approval IPN is processed. */
class WaitingStatus
{
    public function aroundExecute(SetDefaultTbiStatus $subject, callable $proceed, Observer $observer)
    {
        $order = $observer->getEvent()->getOrder();
        if (!$order instanceof Order || !$order->getPayment()
            || $order->getPayment()->getMethod() !== PaymentMethod::CODE
        ) {
            return $proceed($observer);
        }
        if ($order->getPayment()->getAdditionalInformation(ApprovalAccounting::MARKER)) {
            return null;
        }
        if (!$order->getData('tbi_status')) {
            $initialStatus = (string) __('In Progress');
            $order->setData('tbi_status', $initialStatus);
            $order->addStatusHistoryComment(
                __('TBI Bank: statusul finantarii a fost initializat la „%1”.', $initialStatus),
                ApprovalConfig::WAITING_STATUS
            )->setIsCustomerNotified(false);
        }
        $order->setState(ApprovalConfig::ORDER_STATE)->setStatus(ApprovalConfig::WAITING_STATUS)->setIsInProcess(false);
        return null;
    }
}
