<?php

namespace Autogedal\Retur\Controller\Index;

use Magento\Framework\App\Action\HttpPostActionInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;

class UserIncrementId extends Action implements HttpPostActionInterface
{
    protected $_coreRegistry;
    protected $resultLayoutFactory;
    protected $orderCollectionFactory;

    /**
     * @var JsonFactory
     */
    private $resultJsonFactory;

    /**
     * @var RequestInterface
     */
    private $request;

    public function __construct(
        Context $context,
        RequestInterface $request,
        JsonFactory $resultJsonFactory,
        CollectionFactory $orderCollectionFactory,
        \Magento\Framework\Registry $registry,
        \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
    ) {
        parent::__construct($context);
        $this->_coreRegistry = $registry;
        $this->resultLayoutFactory = $resultLayoutFactory;
        $this->orderCollectionFactory = $orderCollectionFactory;
        $this->resultJsonFactory = $resultJsonFactory;
        $this->request = $request;
    }

    /**
     * @return \Magento\Framework\Controller\ResultInterface
     */
    public function execute()
    {
        $resultJson = $this->resultJsonFactory->create();

        if (!$this->request->isAjax()) {
            $resultJson->setStatusHeader(403, '1.1', 'Forbidden');
        } else {
            $incrementId = $this->getRequest()->getParam('increment_id');
            
            if (!$incrementId) {
                $this->messageManager->addErrorMessage(__('Numar de comanda invalid. Te rugam sa verifici cu atentie!',));
                return $resultJson->setData(['message' => __('Numar de comanda invalid. Te rugam sa verifici cu atentie!')]);
            }

            $orderCollection = $this->orderCollectionFactory->create()
                ->addAttributeToSelect("*")
                ->addFieldToFilter('user_increment_id', ['in' => $incrementId])
                ->addFieldToFilter('status', ['in' => ['complete', 'custom_finalizatamanual']]);
            $exists = count($orderCollection) ? true : false;

            if ($exists) {
                foreach ($orderCollection as $order) {
                    $orderStatusHistoryCollection = $order->getStatusHistoryCollection();
                    foreach ($orderStatusHistoryCollection as $orderStatusHistory) {
                        if ($orderStatusHistory->getStatus() == 'complete') {
                            $pastDate = $orderStatusHistory->getCreatedAt();
                            $pastDateTime = new \DateTime($pastDate);
                            $currentDateTime = new \DateTime();
                            $dateDifference = $currentDateTime->diff($pastDateTime);
                            if ($dateDifference->days > 20) {
                                $this->messageManager->addErrorMessage(__('Ne pare rau, termenul de retur a fost depasit.',));
                                return $resultJson->setData(['message' => __('Ne pare rau, termenul de retur a fost depasit.')]);
                            }
                        }
                    }
                }
                $paymentMethod = $order->getPayment();
                $rambursare = 'cont_iban';
                if ($paymentMethod->getMethod() == 'net_card') {
                    $rambursare = 'bani_pe_card';
                }

                $this->_coreRegistry->register('order', $order);

                $resultLayout = $this->resultLayoutFactory->create();
                $resultLayout->getLayout()->getUpdate()->addHandle('autogedalretur_order_items');
                return $resultJson->setData(
                    [
                        'html' => $resultLayout->getLayout()->getBlock('order_items')->toHtml(),
                        'rambursare' => $rambursare
                    ]
                );
            } else {
                $this->messageManager->addErrorMessage(__('Numar de comanda invalid. Te rugam sa verifici cu atentie!',));
                return $resultJson->setData(['message' => __('Numar de comanda invalid. Te rugam sa verifici cu atentie!')]);
            }
        }

        return $resultJson;
    }
}
