<?php

namespace App\Command;

use App\Entity\Negotiation;
use App\Service\CampaignService;
use App\Service\NegotiationService;
use App\Service\NegotiationStatusService;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class CrmMakeNegotiationCommand extends Command
{
    protected static $defaultName = 'crm:make:negotiation';
    private $negotiationService;
    private $campaignService;
    private $negotiationStatusService;

    public function __construct(NegotiationService $negotiationService, CampaignService $campaignService, NegotiationStatusService $negotiationStatusService, $name = null)
    {
        parent::__construct($name);
        $this->negotiationService = $negotiationService;
        $this->campaignService = $campaignService;
        $this->negotiationStatusService = $negotiationStatusService;
    }

    protected function configure()
    {
        $this
            ->setDescription('Add a Negotiation')
            ->addArgument('campaign', InputArgument::REQUIRED, 'Campaign which Negotiation will be assigned to')
            ->addArgument('status', InputArgument::OPTIONAL, 'Status of a content');
    }

    /**
     * @return void
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $campaign = $this->campaignService->getCampaign($input->getArgument('campaign'));
        if ($input->getArgument('status')) {
            $status = $input->getArgument('status');
        } else {
            $status = $this->negotiationStatusService->getFirst();
        }

        $negotiation = (new Negotiation())
            ->setCampaign($campaign)
            ->setStatus($status);

        $this->negotiationService->save($negotiation);

        $output->write('Negotiation created');
    }
}
