<?php

namespace App\Dto\Input;

use App\Dto\Output\CommandTaskOutput;
use App\Dto\Output\CommandTaskScheduleOutput;
use App\Entity\CommandTaskSchedule;
use App\Entity\CommandTaskScript;
use Symfony\Component\Serializer\Annotation\Groups;

final class CommandTaskScriptInput
{
    #[Groups(['command-task-script:write'])]
    public ?string $content = null;

    #[Groups(['command-task-script:write'])]
    public ?string $type = null;

    #[Groups(['command-task-script:write'])]
    public ?array $parameters = null;

    #[Groups(['command-task-script:write'])]
    public ?CommandTaskOutput $commandTask = null;

    #[Groups(['command-task-script:write'])]
    public ?int $order = null;

    public function __construct(?CommandTaskScript $commandTaskScript = null)
    {
        if (!$commandTaskScript) {
            return;
        }

        $this->content = $commandTaskScript->getContent();
        $this->type = $commandTaskScript->getType();
        $this->order = $commandTaskScript->getExecutionOrder();
        $this->parameters = $commandTaskScript->getParameters();
        $this->commandTask = new CommandTaskOutput($commandTaskScript->getCommandTask());
    }

    public function createOrUpdateEntity(?CommandTaskScript $commandTaskScript = null): CommandTaskScript
    {
        if (!$commandTaskScript) {
            $commandTaskScript = new CommandTaskScript();
        }

        if ($this->commandTask) {
            $commandTaskScript->setCommandTask($this->commandTask->getEntity());
        }
        $commandTaskScript->setType($this->type);
        $commandTaskScript->setParameters($this->parameters);
        $commandTaskScript->setContent($this->content);
        $commandTaskScript->setExecutionOrder($this->order);

        return $commandTaskScript;
    }
}