<?php

namespace Symfony\Config;

require_once __DIR__.\DIRECTORY_SEPARATOR.'NetzmachtContaoFormDesigner'.\DIRECTORY_SEPARATOR.'WidgetsConfig.php';

use Symfony\Component\Config\Loader\ParamConfigurator;
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;

/**
 * This class is automatically generated to help in creating a config.
 */
class NetzmachtContaoFormDesignerConfig implements \Symfony\Component\Config\Builder\ConfigBuilderInterface
{
    private $elements;
    private $modules;
    private $virtualWidgets;
    private $widgets;
    private $_usedProperties = [];

    /**
     * @param ParamConfigurator|list<mixed|ParamConfigurator> $value
     * @return $this
     */
    public function elements($value): self
    {
        $this->_usedProperties['elements'] = true;
        $this->elements = $value;

        return $this;
    }

    /**
     * @param ParamConfigurator|list<mixed|ParamConfigurator> $value
     * @return $this
     */
    public function modules($value): self
    {
        $this->_usedProperties['modules'] = true;
        $this->modules = $value;

        return $this;
    }

    /**
     * @param ParamConfigurator|list<mixed|ParamConfigurator> $value
     * @return $this
     */
    public function virtualWidgets($value): self
    {
        $this->_usedProperties['virtualWidgets'] = true;
        $this->virtualWidgets = $value;

        return $this;
    }

    public function widgets(array $value = []): \Symfony\Config\NetzmachtContaoFormDesigner\WidgetsConfig
    {
        $this->_usedProperties['widgets'] = true;

        return $this->widgets[] = new \Symfony\Config\NetzmachtContaoFormDesigner\WidgetsConfig($value);
    }

    public function getExtensionAlias(): string
    {
        return 'netzmacht_contao_form_designer';
    }

    public function __construct(array $value = [])
    {
        if (array_key_exists('elements', $value)) {
            $this->_usedProperties['elements'] = true;
            $this->elements = $value['elements'];
            unset($value['elements']);
        }

        if (array_key_exists('modules', $value)) {
            $this->_usedProperties['modules'] = true;
            $this->modules = $value['modules'];
            unset($value['modules']);
        }

        if (array_key_exists('virtual_widgets', $value)) {
            $this->_usedProperties['virtualWidgets'] = true;
            $this->virtualWidgets = $value['virtual_widgets'];
            unset($value['virtual_widgets']);
        }

        if (array_key_exists('widgets', $value)) {
            $this->_usedProperties['widgets'] = true;
            $this->widgets = array_map(function ($v) { return new \Symfony\Config\NetzmachtContaoFormDesigner\WidgetsConfig($v); }, $value['widgets']);
            unset($value['widgets']);
        }

        if ([] !== $value) {
            throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value)));
        }
    }

    public function toArray(): array
    {
        $output = [];
        if (isset($this->_usedProperties['elements'])) {
            $output['elements'] = $this->elements;
        }
        if (isset($this->_usedProperties['modules'])) {
            $output['modules'] = $this->modules;
        }
        if (isset($this->_usedProperties['virtualWidgets'])) {
            $output['virtual_widgets'] = $this->virtualWidgets;
        }
        if (isset($this->_usedProperties['widgets'])) {
            $output['widgets'] = array_map(function ($v) { return $v->toArray(); }, $this->widgets);
        }

        return $output;
    }

}
