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

namespace Eadesigndev\DragonStar\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\DragonStar\Helper\Api as DragonStarApi;
use Psr\Log\LoggerInterface;
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,
        DragonStarApi $dragonStarApi,
        LoggerInterface $logger,
        AbstractResource $resource = null,
        AbstractDb $resourceCollection = null,
        array $data = []
    )
    {
        $this->_orderRepository = $orderRepository;
        $this->_awbRepository = $awbRepository;

        $this->_api = $dragonStarApi;
        $monolog = new MonoLogger('getawb');
        $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 Dragon ---' );
        $model = $this->_awbRepository->getById($awbId);

        $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(
            'awb_pickup_id' => $model->getData('awb_pickup_id'),
            'destinatar' => $model->getData('recipient'),
            'localitate' => $model->getData('city'),
            'judet' => $model->getData('region_id'),
            'adresa' => $model->getData('street'),
            'contact' =>  $contactPerson,
            'telefon' => $model->getData('telephone'),
            'tipExpeditie' => $model->getData('packages') > 0 ? 'colet' : 'plic',
            'greutate' => $model->getData('weight'),
            'nrColete' => $model->getData('packages') ?? 0,
            'valoareRamburs' => $model->getData('repayment_value'),
            'tarifSambata' => $model->getData('delivery_saturday') ? 1 : 0,
            'observatii' => $model->getData('comments'),
            'platitorEsteDestinatarul' => $model->getData('delivery_payment')
        );
        $apiResponse = $this->_api->awbSend($awb);
        $this->logger->info('$apiResponse: ' .print_r($apiResponse, true));
        $this->logger->info('end ---- generateAwb Dragon ---' );
        return $apiResponse;
    }

    public function deleteAwb($awbNumber)
    {
        return $this->_api->awbDelete($awbNumber);
    }

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

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