<?php

namespace KupShop\ReturnsBundle\Admin\Actions;

use KupShop\AdminBundle\Admin\Actions\AbstractAction;
use KupShop\AdminBundle\Admin\Actions\ActionResult;
use KupShop\AdminBundle\Admin\Actions\IAction;
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
use KupShop\ReturnsBundle\Util\ReturnsUtil;

class ReturnStornoAction extends AbstractAction implements IAction
{
    public function getTypes(): array
    {
        return ['Returns'];
    }

    public function getName(): string
    {
        return 'Stornovat vratku';
    }

    public function execute(&$data, array $config, string $type): ActionResult
    {
        $returns = ServiceContainer::getService(ReturnsUtil::class);
        $return = $returns->getReturn($this->getId());
        $orderId = $return->getIdOrder();

        if ($orderId) {
            $order = new \Order();
            $order->createFromDB($orderId);
            $order->storno(false, 'Storno objednávky na základě storna vratky.', false);
        }

        $returns->changeStatus($this->getID(), ReturnsUtil::STATUS_HANDLED, 'Způsob vyřízení: Vratka byla stornována', false);
        $return->setCustomDataValue('storno', 1);

        return new ActionResult(true, 'Vratka byla stornována');
    }

    public function isEnabled()
    {
        return findModule(\Modules::RETURNS) && findRight('RETURNS');
    }

    public function getColorText()
    {
        return self::COLOR_DANGER;
    }

    /**
     *  Pokud akci chcete v nějakých stavech dialogu třeba nezobrazit.
     *
     * @return false
     */
    public function isVisible()
    {
        return empty($this->dialogData['status']);
    }
}
