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

namespace Eadesigndev\NemoExpress\Model;

use Eadesigndev\Urgent\Api\Data\GenerateAwbInterface;
use Magento\Framework\Data\Collection\AbstractDb;
use Magento\Framework\Model\Context;
use Magento\Framework\Model\AbstractModel;
use Eadesigndev\Awb\Model\AwbRepository;
use Magento\Framework\Model\ResourceModel\AbstractResource;
use Magento\Framework\Registry;
use Magento\Sales\Api\OrderRepositoryInterface;
use Eadesigndev\NemoExpress\Model\Carrier\CourierManagerApi as NemoExpressApi;
use Monolog\Logger as MonoLogger;
use Monolog\Handler\StreamHandler;
use Monolog\Level;

#[\AllowDynamicProperties]
class GenerateAwb extends AbstractModel implements GenerateAwbInterface
{
    protected $_awbRepository;
    protected $_orderRepository;
    protected $_connectorGLS;
    protected $_api;
    /**
     * @var \Zend\Log\Logger
     */
    private $logger;

    public function __construct(
        Context $context,
        Registry $registry,
        AwbRepository $awbRepository,
        OrderRepositoryInterface $orderRepository,
        NemoExpressApi $nemoExpressApi,
        AbstractResource $resource = null,
        AbstractDb $resourceCollection = null,
        array $data = []
    )
    {
        $this->_orderRepository = $orderRepository;
        $this->_awbRepository = $awbRepository;

        $this->_api = $nemoExpressApi;
        $monolog = new MonoLogger('getawbb');
        $monolog->pushHandler(new StreamHandler(BP . '/var/log/getawb.log', Level::Debug));
        $this->logger = $monolog;
        
        parent::__construct($context, $registry, $resource, $resourceCollection, $data);
    }

    public function generateAwb($awbId)
    {
        $this->logger->info(' --- generateAwb Nemo ---  ');
        $model = $this->_awbRepository->getById($awbId);

        $this->_api->setApiKey($model->getData('awb_pickup_id'));

        $this->logger->info('$model awb_pickup_id: '. $model->getData('awb_pickup_id'));
        $contactPerson=substr($model->getData('recipient'), 0, 30);
        if($model->getData('contact')){
            $contactPerson=substr($model->getData('contact'), 0, 30);
        }
        $this->logger->info('$contactPerson: '.$contactPerson);
        $awb = array(
            'to_name' => $model->getData('recipient'),
            'to_city' => $model->getData('city'),
            'to_county' => $model->getData('region_id'),
            'to_str' => $model->getData('street'),
            'to_contact' =>   $contactPerson,
            'to_phone' => $model->getData('telephone'),
            'to_email' => $model->getData('customer_email'),
            "to_country" => "Romania",
            'to_zipcode' => $model->getData('postcode'),

            'use_default_from_address' => 'true',

            'comments' => $model->getData('comments'),
            'content' => $model->getData('content'),
            'type' => $model->getData('packages') > 0 ? 'colet' : 'plic',
            'weight' => $model->getData('weight'),
            'cnt' => (int)$model->getData('packages') + (int)$model->getData('envelopes'),
            'ramburs' => $model->getData('repayment_value'),
            'ramburs_type' => $model->getData('payment_method') ? "cash" : "cont",
            'service_' . NemoExpressApi::SATURDAY_SERVICE_ID => $model->getData('delivery_saturday') ? true : false,
            'service_' . NemoExpressApi::OPEN_SERVICE_ID => $model->getData('open_package') ? true : false,
            'payer' => $model->getData('delivery_payment'),
            'service_type' => $model->getData('tariff_plan')
        );
        $apiResponse = $this->_api->createAwb($awb);
        //$this->logger->info('$apiResponse:  '.print_r($apiResponse,true));
        if (isset($apiResponse->status) && $apiResponse->status == "done" && isset($apiResponse->data->no) ) {
            $this->logger->info('end --- generateAwb Nemo with awb:  '.$apiResponse->data->no. '---');
            return $apiResponse->data->no;
        }
        $this->logger->info('end --- generateAwb Nemo with  Exception---  ');
        throw new \Exception($apiResponse->message);
    }

    public function deleteAwb($awbNumber)
    {
        $apiResponse = $this->_api->awbDelete($awbNumber);

        if (isset($apiResponse->status) && $apiResponse->status == "anulat") {
            return true;
        }

        return false;
    }

    public function getPunctRidicare()
    {
        // TODO: Implement getPunctRidicare() method.
    }

    public function setGenerateAwb($awbId)
    {
        // TODO: Implement setGenerateAwb() method.
    }
}
