<?php

namespace Autogedal\FbReviews\Controller\Adminhtml\FbReview;

use Autogedal\FbReviews\Api\FbReviewRepositoryInterface;
use Autogedal\FbReviews\Api\Data\FbReviewInterface;
use Autogedal\FbReviews\Api\Data\FbReviewInterfaceFactory;
use Autogedal\FbReviews\Controller\Adminhtml\FbReview;
use Magento\Backend\App\Action;
use Magento\Framework\App\Request\DataPersistorInterface;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\DataObject;
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;

class Save extends FbReview
{
    

    /**
     * @var DataPersistorInterface
     */
    private $dataPersistor;

    /**
     * @var FbReviewRepositoryInterface
     */
    private $fbReviewRepository;

    /**
     * @var FbReviewInterfaceFactory
     */
    private $fbReviewFactory;

    public function __construct(
        Action\Context $context,
        DataPersistorInterface $dataPersistor,
        FbReviewRepositoryInterface $fbReviewRepository,
        FbReviewInterfaceFactory $fbReviewFactory,
        CollectionFactory $orderCollectionFactory
    ) {
        parent::__construct($context);
        
        $this->dataPersistor = $dataPersistor;
        $this->fbReviewRepository = $fbReviewRepository;
        $this->fbReviewFactory = $fbReviewFactory;
    }

    public function execute()
    {
        $data = $this->getRequest()->getParams();
        $data['facebook_image'] = $data['facebook_image'][0]['name'];
        
        $returModel = $this->fbReviewFactory->create();
        $returModel->setData($data);
        try {
            $this->fbReviewRepository->save($returModel);
            
            
            $this->dataPersistor->clear(FbReviewInterface::FORM_NAMESPACE);
            $this->messageManager->addSuccessMessage(__('You saved the Facebook Review.'));

            if (!$this->getRequest()->getParam('back')) {
                return $this->_redirect('autogedalfbreviews/fbreview/');
            }
        } catch (LocalizedException $exception) {
            $this->dataPersistor->set(FbReviewInterface::FORM_NAMESPACE, $data);

            $this->messageManager->addErrorMessage($exception->getMessage());

        } catch (\Exception $exception) {
            $this->dataPersistor->set(FbReviewInterface::FORM_NAMESPACE, $data);

            $this->messageManager->addExceptionMessage(
                $exception,
                __('Can\'t save the review right now. Please review the log and try again.')
            );
        }

        return $this->_redirect('autogedalfbreviews/fbreview/edit', ['id' => $returModel->getEntityId()]);
    }
}
