<?php
/**
 * Copyright © 2018 EaDesign by Eco Active S.R.L. All rights reserved.
 * See LICENSE for license details.
 */

namespace Eadesigndev\Awb\Controller\Adminhtml\Index;

use Magento\Backend\App\Action;
use Magento\Framework\App\RequestInterface;
use Eadesigndev\Urgent\Model\Carrier\Carrier as ConnectUrgent;
use Eadesigndev\FanCourier\Helper\Data as ConnectFanCourier;
use Eadesigndev\GLS\Helper\Data as ConnectGLS;
use Eadesigndev\DPD\Helper\Data as ConnectDPD;
use Eadesigndev\DragonStar\Helper\Api as ConnectDragonStar;
use Eadesigndev\NemoExpress\Helper\Data as ConnectNemoExpress;
use Eadesigndev\Sameday\Helper\Data as ConnectSameday;
use Leadlion\AutogedalOrderFlow\Helper\Data as ConnectPacketa;

use Eadesigndev\Awb\Model\Sources\CarrierType;
use Magento\Sales\Model\Order;

#[\AllowDynamicProperties]
class Preview extends Action
{
    protected $carrierConnector;
    protected $carrierName;
    protected $identifier;

    protected $_request;
    protected $_connectUrgent;
    protected $_connectFanCourier;
    protected $_availableCarriers;
    protected $_connectGLS;
    protected $_connectDPD;
    protected $_connectDragonStar;
    protected $_connectSameday;
    protected $_connectPacketa;

    public function __construct(
        Action\Context $context,
        CarrierType $carrierType,
        ConnectUrgent $connectUrgent,
        ConnectFanCourier $connectFanCourier,
        ConnectGLS $connectGLS,
        ConnectDPD $connectDPD,
        ConnectDragonStar $connectDragonStar,
        ConnectNemoExpress $connectNemoExpress,
        ConnectSameday $connectSameday,
        ConnectPacketa $connectPacketa,
        RequestInterface $request
    )
    {
        $this->_availableCarriers = $carrierType->getAvailable();
        $this->_request = $request;
        $this->_connectFanCourier = $connectFanCourier;
        $this->_connectUrgent = $connectUrgent;
        $this->_connectGLS = $connectGLS;
        $this->_connectDPD = $connectDPD;
        $this->_connectDragonStar = $connectDragonStar;
        $this->_connectNemoExpress = $connectNemoExpress;
        $this->_connectSameday = $connectSameday;
        $this->_connectPacketa = $connectPacketa;

        parent::__construct($context);
    }

    public function execute()
    {
        if ($this->_request->getParam('carrier')) {

            $this->carrierName = $this->_request->getParam('carrier');

            if (is_numeric($this->carrierName)) {
                $carrierId = $this->carrierName;
                $this->carrierName = $this->_availableCarriers[$carrierId]->getText();
            } else {
                foreach ($this->_availableCarriers as $carrierId => $carrierObject) {
                    if ($this->carrierName == $carrierObject->getText()) {
                        break;
                    }
                }
            }

            if ($carrierId >= 0) {
                switch ($carrierId)
                {
                    case CarrierType::URGENT_CURRIER:
                        $this->carrierConnector = $this->_connectUrgent;
                        break;
                    case CarrierType::FAN_CURRIER:
                        $this->carrierConnector = $this->_connectFanCourier;
                        break;
                    case CarrierType::DPD:
                        $this->carrierConnector = $this->_connectDPD;
                        break;
                    case CarrierType::GLS:
                        $this->carrierConnector = $this->_connectGLS;
                        break;
                    case CarrierType::DRAGON_STAR:
                        $this->carrierConnector = $this->_connectDragonStar;
                        break;
                    case CarrierType::NEMO_EXPRESS:
                        $this->carrierConnector = $this->_connectNemoExpress;
                        break;
                    case CarrierType::SAMEDAY:
                        $this->carrierConnector = $this->_connectSameday;
                        break;
                    case CarrierType::PACKETA_SAMEDAY:
                        $this->carrierConnector = $this->_connectPacketa;
                        break;
                }
            }
        }

        if (method_exists($this->carrierConnector, 'getAwbDocument')) {
            $paperSize = $this->_request->getParam('paperSize');
            $pickupId = $this->_request->getParam('pickup_id');
            if ($paperSize) {
                if ($carrierId == CarrierType::DPD) {
                    $response = $this->carrierConnector->getAwbDocumentA6($this->_request->getParam('identifier'), $pickupId);
                } else {
                    $response = $this->carrierConnector->getAwbDocument($this->_request->getParam('identifier'), $pickupId, "Connect");
                }
            } else {
                $response = $this->carrierConnector->getAwbDocument($this->_request->getParam('identifier'), $pickupId);
            }

            if ($this->_request->getParam('order_id')) {
                $orderRepository = \Magento\Framework\App\ObjectManager::getInstance()->get(\Magento\Sales\Api\OrderRepositoryInterface::class);
                $order = $orderRepository->get($this->_request->getParam('order_id'));
    
                $order->setData('state', Order::STATE_COMPLETE);
                $order->setData('status', Order::STATE_COMPLETE);
                $order->addStatusToHistory($order->getStatus(), 'Order Status : '. Order::STATE_COMPLETE);
                $order->save();
            }
            
            }
        else {
            die(__('There is no download method for %s', $this->carrierName));
        }
        if(strlen($response)>  1000) {
            header('Content-type:application/pdf');

        }
        echo $response;
        die();
    }
}
