<?php
declare(strict_types=1);

namespace Autogedal\Extend\Console\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Autogedal\Extend\Model\Product\SpecsDescriptionBulkUpdater;
use Autogedal\Extend\Model\Product\SpecsDescriptionManager;
use Magento\Framework\Console\Cli;

class UpdateSpecsDescriptionCommand extends Command
{
    public function __construct(
        private readonly SpecsDescriptionBulkUpdater $bulkUpdater
    ) {
        parent::__construct();
    }


    protected function configure(): void
    {
        $this->setName('autogedal:product:update_specs_description');
        $this->setDescription(sprintf(
            'Updates description with specs for all products in category %d (Carlige remorcare)',
            SpecsDescriptionManager::TARGET_CATEGORY_ID
        ));
    }


    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        try {
            $result = $this->bulkUpdater->execute(
                static function (int $processed, int $updated) use ($output): void {
                    $output->writeln("Processed $processed products, updated $updated...");
                }
            );
        } catch (\Exception $e) {
            $output->writeln('<error>' . $e->getMessage() . '</error>');
            return Cli::RETURN_FAILURE;
        }

        $output->writeln(sprintf(
            '<info>Done. Updated %d products out of %d.</info>',
            $result['updated'],
            $result['processed']
        ));

        return Cli::RETURN_SUCCESS;
    }
}
