<?php

namespace Webkul\WooCommerceBundle\Extension\MassAction\Handler;

use Oro\Bundle\DataGridBundle\Datagrid\DatagridInterface;
use Oro\Bundle\DataGridBundle\Extension\MassAction\Actions\MassActionInterface;
use Oro\Bundle\DataGridBundle\Extension\MassAction\MassActionResponse;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
use Symfony\Component\Translation\TranslatorInterface;
use Webkul\WooCommerceBundle\Datasource\Orm\CustomObjectIdHydrator;
use Webkul\WooCommerceBundle\Listener\ClassDefinationForCompatibility;

$versionCompatibily = new ClassDefinationForCompatibility();
$versionCompatibily->objectCreate();


/**
 * Mass delete products action handler
 *
 * @author    Webkul
 * @copyright  Webkul Sotware Pvt Ltd (http://www.webkul.com)
 */
class DeleteCredentialsMassActionHandler extends \DeleteMassActionHandler
{
    public function __construct(
        \HydratorInterface $hydrator,
        TranslatorInterface $translator,
        EventDispatcherInterface $eventDispatcher
    ) {
        parent::__construct($hydrator, $translator, $eventDispatcher);
    }

    /**
     * {@inheritdoc}
     *
     * Dispatch two more events for export mapping
     */
    public function handle(DatagridInterface $datagrid, MassActionInterface $massAction)
    {
        // dispatch pre handler event
        $massActionEvent = new \MassActionEvent($datagrid, $massAction, []);
        $this->eventDispatcher->dispatch(\MassActionEvents::MASS_DELETE_PRE_HANDLER, $massActionEvent);

        $datasource = $datagrid->getDatasource();
        $datasource->setHydrator(new CustomObjectIdHydrator);

        $objectIds = $datasource->getResults();

        try {
            $this->eventDispatcher->dispatch('webkul_woocommerce_connector.pre_mass_remove.credentials', new GenericEvent($objectIds));

            $countRemoved = $datasource->getMassActionRepository()->deleteFromIds($objectIds);

            $this->eventDispatcher->dispatch('webkul_woocommerce_connector.post_mass_remove.credentials', new GenericEvent($objectIds));
        } catch (\Exception $e) {
            $errorMessage = $e->getMessage();

            return new MassActionResponse(false, $this->translator->trans($errorMessage));
        }

        // dispatch post handler event
        $massActionEvent = new \MassActionEvent($datagrid, $massAction, $objectIds);
        $this->eventDispatcher->dispatch(\MassActionEvents::MASS_DELETE_POST_HANDLER, $massActionEvent);

        return $this->getResponse($massAction, $countRemoved);
    }
}
