<?php

namespace Autogedal\FbReviews\Controller\Adminhtml\FbReview;

use Autogedal\FbReviews\Api\Data\FbReviewInterface;
use Magento\Backend\App\Action;
use Magento\Ui\Component\MassAction\Filter;
use Autogedal\FbReviews\Api\FbReviewRepositoryInterface;
use Autogedal\FbReviews\Model\ResourceModel\FbReview\CollectionFactory;
use Magento\Framework\Exception\LocalizedException;

class MassDelete extends Action
{
    /**
     * @var Filter
     */
    protected $filter;

    /**
     * @var FbReviewRepositoryInterface
     */
    protected $repository;

    /**
     * @var CollectionFactory
     */
    protected $fbReviewCollectionFactory;

    public function __construct(
        Action\Context $context,
        Filter $filter,
        CollectionFactory $fbReviewCollectionFactory,
        FbReviewRepositoryInterface $repository
    ) {
        parent::__construct($context);
        $this->filter = $filter;
        $this->fbReviewCollectionFactory = $fbReviewCollectionFactory;
        $this->repository = $repository;
    }

    /**
     * Mass action execution
     */
    public function execute()
    {
        $this->filter->applySelectionOnTargetProvider(); // compatibility with Mass Actions on Magento 2.1.0
        $collection = $this->filter->getCollection($this->fbReviewCollectionFactory->create());

        $collectionSize = $collection->getSize();
        if ($collectionSize) {
            try {
                foreach ($collection->getItems() as $fbReview) {
                    $this->itemAction($fbReview);
                }

                $this->messageManager->addSuccessMessage($this->getSuccessMessage($collectionSize));
            } catch (LocalizedException $e) {
                $this->messageManager->addErrorMessage($e->getMessage());
            } catch (\Exception $e) {
                $this->messageManager->addErrorMessage($this->getErrorMessage());
            }
        }

        $resultRedirect = $this->resultRedirectFactory->create();
        $resultRedirect->setRefererUrl();
        return $resultRedirect;
    }

    /**
     * @param FbReviewInterface $fbreview
     */
    protected function itemAction(FbReviewInterface $fbreview)
    {
        $this->repository->deleteById($fbreview->getEntityId());
    }

    /**
     * @return \Magento\Framework\Phrase
     */
    protected function getErrorMessage()
    {
        return __('We can\'t delete item right now. Please review the log and try again.');
    }

    /**
     * @param int $collectionSize
     *
     * @return \Magento\Framework\Phrase
     */
    protected function getSuccessMessage($collectionSize = 0)
    {
        if ($collectionSize) {
            return __('A total of %1 record(s) have been deleted.', $collectionSize);
        }

        return __('No records have been deleted.');
    }
}
