<?php

namespace App\Command;

use App\Service\Campaign\Tasklist\TasklistService;
use App\Service\CampaignService;
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 Symfony\Component\Console\Style\SymfonyStyle;

class CrmCopyTasklistCommand extends Command
{
    protected static $defaultName = 'crm:clone:tasklist';
    private $tasklistService;
    private $campaignService;

    public function __construct(TasklistService $tasklistService, CampaignService $campaignService, $name = null)
    {
        parent::__construct($name);
        $this->tasklistService = $tasklistService;
        $this->campaignService = $campaignService;
    }

    protected function configure()
    {
        $this
            ->setDescription('Clone a Tasklist')
            ->addArgument('campaign', InputArgument::REQUIRED, 'Campaign which content will be assigned to')
            ->addArgument('tasklist', InputArgument::REQUIRED, 'Tasklist to clone');
    }

    protected function execute(InputInterface $input, OutputInterface $output): ?int
    {
        $io = new SymfonyStyle($input, $output);

        try {
            $campaign = $this->campaignService->getCampaign((int) $input->getArgument('campaign'));
            $tasklistToCloneFrom = $this->tasklistService->get((int) $input->getArgument('tasklist'));
        } catch (\Exception $e) {
            $io->error($e->getMessage());

            return 1;
        }

        $tasklist = (clone $tasklistToCloneFrom)->setTemplate(0);
        $tasklist->setCampaign($campaign);

        $this->tasklistService->save($tasklist);

        $output->write('Tasklist cloned');
    }
}
