<?php

namespace Autogedal\FbReviews\Ui\DataProviders;

use Autogedal\FbReviews\Api\Data\FbReviewInterface;
use Autogedal\FbReviews\Model\ResourceModel\FbReview\CollectionFactory;
use Magento\Framework\App\Request\DataPersistorInterface;
use Magento\Store\Model\StoreManagerInterface;

class FbReviewDataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider
{
    /**
     * @var DataPersistorInterface
     */
    private $dataPersistor;

    /**
     * @var StoreManagerInterface
     */
    private $storeManager;

    public function __construct(
        $name,
        $primaryFieldName,
        $requestFieldName,
        CollectionFactory $collectionFactory,
        DataPersistorInterface $dataPersistor,
        StoreManagerInterface $storeManager,
        array $meta = [],
        array $data = []
    ) {
        parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);

        $this->collection = $collectionFactory->create();
        $this->dataPersistor = $dataPersistor;
        $this->storeManager = $storeManager;
    }

    public function getData()
    {
        $result = [];

        foreach ($this->collection->getItems() as $item) {
            // prepare data
            $data = $item->getData();
            $m['facebook_image'][0]['name'] = $item->getFacebookImage();
            $m['facebook_image'][0]['url'] = $this->getMediaUrl().$item->getFacebookImage();
            $result[$item->getEntityId()] = array_merge($data, $m);
        }

        if ($savedData = $this->dataPersistor->get(FbReviewInterface::FORM_NAMESPACE)) {
            /** @var AreaInterface $model */
            $model = $this->collection->getNewEmptyItem();
            $model->setData($savedData);
            
            $result[$model->getEntityId()] = $model->getData();
        }

        return $result;
    }

    public function getMediaUrl()
    {
        $mediaUrl = $this->storeManager->getStore()
            ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA).'fbreview/images/tmp/';
        return $mediaUrl;
    }
}
