<?php
namespace Eadesigndev\Sameday\Helper;

use Magento\Framework\App\Config\ScopeConfigInterface;
use Eadesigndev\Sameday\Model\GenerateAwb;
use Sameday\Sameday;
use Sameday\Objects\Types\AwbPdfType;
use Sameday\Requests\SamedayGetAwbPdfRequest;
use Sameday\Responses\SamedayGetAwbPdfResponse;
use Eadesigndev\Sameday\Helper\ApiHelper as SamedayApiHelper;
use Eadesigndev\Awb\Model\AwbRepository;

#[\AllowDynamicProperties]
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{

    const XML_PATH_ENABLED = 'sameday_customshipping/general/enabled';
    const XML_PATH_DEBUG   = 'sameday_customshipping/general/debug';
    /**
     * @var \Psr\Log\LoggerInterface
     */
    protected $_logger;

    /**
     * @var \Magento\Framework\Module\ModuleListInterface
     */
    protected $_moduleList;

    /**
     * @var \Eadesigndev\Sameday\Helper\ApiHelper
     */
    protected $samedayApiHelper;
    protected $awbRepository;

    /**
     * @param \Magento\Framework\App\Helper\Context $context
     * @param \Magento\Framework\Module\ModuleListInterface $moduleList
     */
    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Framework\Module\ModuleListInterface $moduleList,
        ScopeConfigInterface $scopeConfig,
        SamedayApiHelper $samedayApiHelper,
        AwbRepository $awbRepository
    ) {
        $this->_logger                  = $context->getLogger();
        $this->_moduleList              = $moduleList;
        $this->scopeConfig              = $scopeConfig;
        $this->samedayApiHelper         = $samedayApiHelper;
        $this->awbRepository            = $awbRepository;

        parent::__construct($context);
    }

    /**
     * Check if enabled
     *
     * @return string|null
     */
    public function isEnabled()
    {
        return $this->scopeConfig->getValue(
            self::XML_PATH_ENABLED,
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
        );
    }

    public function getDebugStatus()
    {
        return $this->scopeConfig->getValue(
            self::XML_PATH_DEBUG,
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
        );
    }

    public function getAwbDocument($identifier, $pickupId = null)
    {
        $awb = $this->awbRepository->getByAwbNumber($identifier);
        $apiRequest = new SamedayGetAwbPdfRequest($awb->getAwbNumber(), (new AwbPdfType(AwbPdfType::A4)));

        /** @var SamedayGetAwbPdfResponse $response */
        $response = $this->samedayApiHelper->doRequest($apiRequest, 'getAwbPdf');
        //$this->getResponse()->setHeader('Content-type', 'application/pdf; charset=UTF-8');
        //$this->getResponse()->setBody($response->getPdf());
        return $response->getPdf();
    }

    /**
     *
     * @param $message
     * @param bool|false $useSeparator
     */
    public function log($message, $useSeparator = false)
    {
        if ($this->getDebugStatus()) {
            if ($useSeparator) {
                $this->_logger->addDebug(str_repeat('=', 100));
            }

            $this->_logger->addDebug($message);
        }
    }

    private function isTesting()
    {
        return (bool) $this->scopeConfig->getValue('carriers/sameday/testing');
    }
}