<?php

namespace Leadlion\SalesOrder\Plugin\Component;

use Magento\Framework\App\RequestInterface;
use Magento\Ui\Component\MassAction as ComponentMassAction;

class MassAction
{
    /** @var RequestInterface */
    private $_request;

    /**
     * MassAction constructor.
     * @param RequestInterface $request
     */
    public function __construct(
        RequestInterface  $request
    ) {
        $this->_request = $request;
    }

    /**
     * @param ComponentMassAction $massAction
     */
    public function afterPrepare(ComponentMassAction $massAction)
    {
        if ($this->_request->getFullActionName() === 'sales_order_index') {
            $config = $massAction->getData('config');
            if (isset($config['actions']) && $config['actions']) {
                $count = 0;
                foreach (["mass_email_document" => 0, "mass_download_document" => 1] as $actionType => $position) {
                    /** @var $config mixed[][] */
                    foreach ($config['actions'] as $key => $action) {
                        if ($action['type'] == $actionType) {
                            $newPosition = max((int) $position, $count);
                            $this->moveElement($config['actions'], $key, $newPosition);
                            break;
                        }
                    }
                    $count++;
                }

                $massAction->setData('config', $config);
            }
        }
    }

    /**
     * @param array $actions
     * @param int $oldPosition
     * @param int $newPosition
     */
    public function moveElement(&$actions, $oldPosition, $newPosition)
    {
        $outputArray = array_splice($actions, $oldPosition, 1);
        array_splice($actions, $newPosition, 0, $outputArray);
    }
}
