<?php

namespace Wrm\Events\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use TYPO3\CMS\Core\Core\Bootstrap;
use Wrm\Events\Domain\DestinationData\ImportFactory;
use Wrm\Events\Service\DestinationDataImportService;

class ImportDestinationDataViaConfigruationCommand extends Command
{
    /**
     * @var DestinationDataImportService
     */
    private $destinationDataImportService;

    /**
     * @var ImportFactory
     */
    private $importFactory;

    public function __construct(
        DestinationDataImportService $destinationDataImportService,
        ImportFactory $importFactory
    ) {
        parent::__construct();
        $this->destinationDataImportService = $destinationDataImportService;
        $this->importFactory = $importFactory;
    }

    public function configure(): void
    {
        $this->setDescription('Import Destination Data Events');
        $this->setHelp('Destination Data Events are imported from given configuration record.');

        $this->addArgument(
            'configurationUid',
            InputArgument::REQUIRED,
            'UID of the configuration to import'
        );
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        Bootstrap::initializeBackendAuthentication();

        $configurationUid = $input->getArgument('configurationUid');
        if (is_numeric($configurationUid)) {
            $configurationUid = (int)$configurationUid;
        } else {
            throw new \Exception('No numeric uid for configuration provided.', 1643267138);
        }

        $import = $this->importFactory->createFromUid(
            $configurationUid
        );
        return $this->destinationDataImportService->import(
            $import
        );
    }
}