<?php
namespace Autogedal\Retur\Block\Customer\View;

use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\Template\Context;
use Magento\Framework\Registry;
use Autogedal\Retur\Model\Retur\Status\HistoryFactory;
use Autogedal\Retur\Model\ResourceModel\Retur\Status\History\CollectionFactory as HistoryCollectionFactory;
use Autogedal\Retur\Ui\Component\Listing\Column\Status\Options as StatusOptions;

class History extends Template
{
    /**
     * @var Registry
     */
    protected $coreRegistry;

    /**
     * @var HistoryCollectionFactory
     */
    protected $historyCollectionFactory;

    /**
     * @var StatusOptions
     */
    protected $statusOptions;

    /**
     * @param Context $context
     * @param Registry $registry
     * @param HistoryCollectionFactory $historyCollectionFactory
     * @param StatusOptions $statusOptions
     * @param array $data
     */
    public function __construct(
        Context $context,
        Registry $registry,
        HistoryCollectionFactory $historyCollectionFactory,
        StatusOptions $statusOptions,
        array $data = []
    ) {
        $this->coreRegistry = $registry;
        $this->historyCollectionFactory = $historyCollectionFactory;
        $this->statusOptions = $statusOptions;
        parent::__construct($context, $data);
    }

    /**
     * Get current return
     *
     * @return \Autogedal\Retur\Api\Data\ReturInterface|null
     */
    public function getReturn()
    {
        return $this->coreRegistry->registry('current_retur');
    }

    /**
     * Get return history collection
     *
     * @return \Autogedal\Retur\Model\ResourceModel\Retur\Status\History\Collection
     */
    public function getHistoryCollection()
    {
        $retur = $this->getReturn();
        if (!$retur) {
            return null;
        }

        $collection = $this->historyCollectionFactory->create();
        $collection->addFieldToFilter('parent_id', $retur->getId());
        $collection->setOrder('created_at', 'desc');

        return $collection;
    }

    /**
     * Get status label
     *
     * @param int $statusId
     * @return string
     */
    public function getStatusLabel($statusId)
    {
        $options = $this->statusOptions->toOptionArray();
        foreach ($options as $option) {
            if ($option['value'] == $statusId) {
                return $option['label'];
            }
        }
        return '';
    }

    /**
     * Format date in medium format
     *
     * @param string $date
     * @return string
     */
    public function formatHistoryDate($date)
    {
        return $this->formatDate(
            $date,
            \IntlDateFormatter::MEDIUM,
            false,
            null
        );
    }
}
