<?php
namespace Autogedal\AutogedalHelper\Block;

use Magento\Framework\View\Element\Template;

class Agent extends \Magento\Framework\View\Element\Template
{
    const ORDER_SOURCE_KEY = "autogedal_order_source";
    const ORDER_AGENT_KEY = "autogedal_operator_id";
    const ADMIN_ROLE_ID = 1;

    public $objectManager;
    protected $userRole;
    protected $userCollectionFactory;
    protected $orderSources;
    protected $orderRepo;

    public function __construct(
        Template\Context $context, array $data,
        \Magento\Backend\Model\Auth\Session $authSession,
        \Magento\User\Model\ResourceModel\User\CollectionFactory $userCollectionFactory,
        \Autogedal\AutogedalHelper\Model\Config\Source\Order\Sources $orderSources,
        \Magento\Sales\Api\OrderRepositoryInterface $orderRepo
    )
    {
        parent::__construct($context, $data);
        $this->objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $this->userRole = $authSession->getUser()->getRole();
        $this->userCollectionFactory = $userCollectionFactory;
        $this->orderSources = $orderSources;
        $this->orderRepo = $orderRepo;
    }

    public function getAjaxUrl()
    {
        return $this->getUrl("helper/index/agent");
    }

    public function getUsers()
    {
        $adminUsers = [];

        foreach ($this->userCollectionFactory->create() as $user) {
            $adminUsers[] = [
                'value' => $user->getId(),
                'label' => $user->getName()
            ];
        }

        return $adminUsers;
    }

    public function getOrderSources()
    {
        return $this->orderSources->toOptionArray();
    }

    public function getSelectedOptions()
    {
        $orderId = $this->getOrderId();
        $orderObject = $this->orderRepo->get($orderId);

        $result = [
            "source" => $orderObject->getData(self::ORDER_SOURCE_KEY),
            "agent" => $orderObject->getData(self::ORDER_AGENT_KEY),
        ];

        return $result;
    }

    public function getOrderId()
    {
        $orderId = $this->getRequest()->getParam('order_id');

        if (!empty($orderId)) {
            return $orderId;
        }

        return false;
    }

    public function checkAccess()
    {
        $orderId = $this->getOrderId();
        $orderObject = $this->orderRepo->get($orderId);

        $ressult = $this->userRole->getRoleId() == self::ADMIN_ROLE_ID && !empty($orderObject->getRemoteIp);
        return $ressult;
    }
}