<?php

declare(strict_types=1);

/*
 * This file is part of vonRotenberg Shopware API Bundle.
 *
 * (c) vonRotenberg
 *
 * @license proprietary
 */

namespace vonRotenberg\ShopwareApiBundle\Command;

use Contao\CoreBundle\Framework\ContaoFramework;
use Contao\System;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use vonRotenberg\ShopwareApiBundle\API\Shopware;

class ShopwareGetProductsBySku extends Command
{
    protected static $defaultName = 'shopware:get-products-by-sku';

    protected $framework;

    public function __construct(ContaoFramework $framework)
    {
        $this->framework = $framework;

        parent::__construct();
    }

    protected function configure(): void
    {
        $this
            ->setName(self::$defaultName)
            ->setDescription('Search Shopware products by SKU')
            ->addOption('short','s',InputOption::VALUE_NONE, 'Short result: Only show name and basic product infos')
        ;
    }
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $this->framework->initialize();

        $io = new SymfonyStyle($input, $output);
        $io->title('Shopware products search by SKU');
        $strSku = $io->ask('Enter SKU to search for');

        /** @var Shopware $Shopware */
        $Shopware = System::getContainer()->get(Shopware::class);

        if (($Products = $Shopware->getProductsForSku($strSku,true, $input->getOption('short') ? true : false)) !== false)
        {
            $cloner = new VarCloner();
            $dumper = new CliDumper();

            if ($Products->total)
            {
                $dumper->dump(($cloner->cloneVar($Products->data)));
            }
            $io->success(sprintf('Found %s product(s)',$Products->total));

            return self::SUCCESS;
        }

        $io->error('Could not retrieve products by SKU');
        return self::FAILURE;
    }
}