<?php

namespace Autogedal\Retur\Block\Adminhtml;

use Autogedal\Retur\Model\Provider\StatusProvider;
use Magento\Authorization\Model\Acl\Role\UserFactory as RoleUserFactory;
use Magento\User\Model\UserFactory;
use Autogedal\Retur\Model\Provider\RespinsProvider;

class History extends \Magento\Backend\Block\Template
{
    protected $userFactory;
    
    /**
 	* Block template.
 	*
 	* @var string
 	*/
    protected $_template = 'history.phtml';

    /**
     * Core registry
     *
     * @var \Magento\Framework\Registry
     */
    protected $_coreRegistry = null;

    /**
     * Sales data
     *
     * @var \Magento\Sales\Helper\Data
     */
    protected $_salesData = null;

    /**
     * @var \Magento\Sales\Helper\Admin
     */
    private $adminHelper;
    protected $statusProvider;
    protected $respinsProvider;

    /**
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Sales\Helper\Data $salesData
     * @param \Magento\Framework\Registry $registry
     * @param \Magento\Sales\Helper\Admin $adminHelper
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Sales\Helper\Data $salesData,
        \Magento\Framework\Registry $registry,
        \Magento\Sales\Helper\Admin $adminHelper,
        StatusProvider $statusProvider,
        UserFactory $userFactory,
        RespinsProvider $respinsProvider,
        array $data = []
    ) {
        $this->respinsProvider = $respinsProvider;
        $this->userFactory = $userFactory;
        $this->_coreRegistry = $registry;
        $this->_salesData = $salesData;
        $this->statusProvider = $statusProvider;
        parent::__construct($context, $data);
        $this->adminHelper = $adminHelper;
    }
    
    /**
     * Preparing global layout
     *
     * @return $this
     */
    protected function _prepareLayout()
    {
        $onclick = "submitAndReloadArea($('order_history_block').parentNode, '" . $this->getSubmitUrl() . "')";
        $button = $this->getLayout()->createBlock(
            \Magento\Backend\Block\Widget\Button::class
        )->setData(
            ['label' => __('Submit Comment'), 'class' => 'action-save action-secondary', 'onclick' => $onclick]
        );
        $this->setChild('submit_button', $button);
        return parent::_prepareLayout();
    }

    public function getStatusLabel($status)
    {
        $returStatuses = $this->statusProvider->toOptionArray();
        foreach ($returStatuses as $key => $info) {
            if ($info['value'] == $status) {
                return $info['label'];
            }
        }
    }

    /**
     * Get admin
     *
     * @return array
     */
    public function getAdmin($adminId)
    {
        $user = $this->userFactory->create()->load($adminId);

        return $user->getFirstname(). ' '.$user->getLastname();
    }

    public function getRespinsReasons()
    {
        return $this->respinsProvider->toOptionArray();
    }
    
    /**
     * Get stat uses
     *
     * @return array
     */
    public function getStatuses()
    {
        $returStates = [
            StatusProvider::NOU => [
                ['value' => StatusProvider::NOU, 'label' => __('NOU')],
                ['value' => StatusProvider::IN_LIVRARE, 'label' => __('IN LIVRARE')],
                ['value' => StatusProvider::SOLUTIONAT_CU_DISCOUNT, 'label' => __('SOLUTIONAT CU DISCOUNT')],
                ['value' => StatusProvider::RETUR_ANULAT, 'label' => __('ANULAT')]
            ],
            StatusProvider::SOLUTIONAT_CU_DISCOUNT => [
                ['value' => StatusProvider::SOLUTIONAT_CU_DISCOUNT, 'label' => __('SOLUTIONAT CU DISCOUNT')]
            ],
            StatusProvider::IN_LIVRARE => [
                ['value' => StatusProvider::IN_LIVRARE, 'label' => __('IN LIVRARE')],
                ['value' => StatusProvider::ACCEPTAT, 'label' => __('ACCEPTAT')],
                ['value' => StatusProvider::RESPINS, 'label' => __('RESPINS')]
            ],
            StatusProvider::ACCEPTAT => [
                ['value' => StatusProvider::ACCEPTAT, 'label' => __('ACCEPTAT')],
                ['value' => StatusProvider::STORNAT, 'label' => __('STORNAT')]
            ],
            StatusProvider::RESPINS => [
                ['value' => StatusProvider::RESPINS, 'label' => __('RESPINS')]
            ],
            StatusProvider::STORNAT => [
                ['value' => StatusProvider::STORNAT, 'label' => __('STORNAT')],
                ['value' => StatusProvider::PLATIT, 'label' => __('PLATIT')]
            ],
            StatusProvider::PLATIT => [
                ['value' => StatusProvider::PLATIT, 'label' => __('PLATIT')],
                ['value' => StatusProvider::FINALIZAT, 'label' => __('FINALIZAT')]
            ],
            StatusProvider::FINALIZAT => [
                ['value' => StatusProvider::FINALIZAT, 'label' => __('FINALIZAT')]
            ],
            StatusProvider::RETUR_ANULAT => [
                ['value' => StatusProvider::RETUR_ANULAT, 'label' => __('ANULAT')]
            ]
        ];

        $statuses = $this->statusProvider->toOptionArray();

        if ($this->getRetur()->getEntityId()) {
            $currentReturStatus = $this->getRetur()->getStatus();
            $returStates = isset($returStates[$currentReturStatus]) ? $returStates[$currentReturStatus] : [];
            if (!empty($returStates)) {
                return $returStates;
            }
        }

        return $returStates;
    }

    /**
     * Check allow to send order comment email
     *
     * @return bool
     */
    public function canSendCommentEmail()
    {
        return $this->_salesData->canSendOrderCommentEmail($this->getRetur()->getStoreId())
            && $this->_authorization->isAllowed('Magento_Sales::email');
    }

    public function getRetur()
    {
        return $this->_coreRegistry->registry('current_retur');
    }

    /**
     * Check allow to add comment
     *
     * @return bool
     */
    public function canAddComment()
    {
        return $this->_authorization->isAllowed('Magento_Sales::comment');
    }

    /**
     * Submit URL getter
     *
     * @return string
     */
    public function getSubmitUrl()
    {
        return $this->getUrl('autogedalretur/retur/addComment', ['retur_id' => $this->getRetur()->getEntityId()]);
    }

    /**
     * Customer Notification Applicable check method
     *
     * @param  \Magento\Sales\Model\Order\Status\History $history
     * @return bool
     */
    public function isCustomerNotificationNotApplicable(\Autogedal\Retur\Model\Retur\Status\History $history)
    {
        return $history->isCustomerNotificationNotApplicable();
    }

    /**
     * Replace links in string
     *
     * @param array|string $data
     * @param null|array $allowedTags
     * @return string
     */
    public function escapeHtml($data, $allowedTags = null)
    {
        return $this->adminHelper->escapeHtmlWithLinks($data, $allowedTags);
    }
}
