<?php

namespace Symfony\Config\PimUi;

require_once __DIR__.\DIRECTORY_SEPARATOR.'Settings'.\DIRECTORY_SEPARATOR.'LanguageConfig.php';
require_once __DIR__.\DIRECTORY_SEPARATOR.'Settings'.\DIRECTORY_SEPARATOR.'LoadingMessageEnabledConfig.php';
require_once __DIR__.\DIRECTORY_SEPARATOR.'Settings'.\DIRECTORY_SEPARATOR.'LoadingMessagesConfig.php';

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

/**
 * This class is automatically generated to help in creating a config.
 */
class SettingsConfig 
{
    private $language;
    private $loadingMessageEnabled;
    private $loadingMessages;
    private $_usedProperties = [];

    public function language(array $value = []): \Symfony\Config\PimUi\Settings\LanguageConfig
    {
        if (null === $this->language) {
            $this->_usedProperties['language'] = true;
            $this->language = new \Symfony\Config\PimUi\Settings\LanguageConfig($value);
        } elseif (0 < \func_num_args()) {
            throw new InvalidConfigurationException('The node created by "language()" has already been initialized. You cannot pass values the second time you call language().');
        }

        return $this->language;
    }

    public function loadingMessageEnabled(array $value = []): \Symfony\Config\PimUi\Settings\LoadingMessageEnabledConfig
    {
        if (null === $this->loadingMessageEnabled) {
            $this->_usedProperties['loadingMessageEnabled'] = true;
            $this->loadingMessageEnabled = new \Symfony\Config\PimUi\Settings\LoadingMessageEnabledConfig($value);
        } elseif (0 < \func_num_args()) {
            throw new InvalidConfigurationException('The node created by "loadingMessageEnabled()" has already been initialized. You cannot pass values the second time you call loadingMessageEnabled().');
        }

        return $this->loadingMessageEnabled;
    }

    public function loadingMessages(array $value = []): \Symfony\Config\PimUi\Settings\LoadingMessagesConfig
    {
        if (null === $this->loadingMessages) {
            $this->_usedProperties['loadingMessages'] = true;
            $this->loadingMessages = new \Symfony\Config\PimUi\Settings\LoadingMessagesConfig($value);
        } elseif (0 < \func_num_args()) {
            throw new InvalidConfigurationException('The node created by "loadingMessages()" has already been initialized. You cannot pass values the second time you call loadingMessages().');
        }

        return $this->loadingMessages;
    }

    public function __construct(array $value = [])
    {
        if (array_key_exists('language', $value)) {
            $this->_usedProperties['language'] = true;
            $this->language = new \Symfony\Config\PimUi\Settings\LanguageConfig($value['language']);
            unset($value['language']);
        }

        if (array_key_exists('loading_message_enabled', $value)) {
            $this->_usedProperties['loadingMessageEnabled'] = true;
            $this->loadingMessageEnabled = new \Symfony\Config\PimUi\Settings\LoadingMessageEnabledConfig($value['loading_message_enabled']);
            unset($value['loading_message_enabled']);
        }

        if (array_key_exists('loading_messages', $value)) {
            $this->_usedProperties['loadingMessages'] = true;
            $this->loadingMessages = new \Symfony\Config\PimUi\Settings\LoadingMessagesConfig($value['loading_messages']);
            unset($value['loading_messages']);
        }

        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['language'])) {
            $output['language'] = $this->language->toArray();
        }
        if (isset($this->_usedProperties['loadingMessageEnabled'])) {
            $output['loading_message_enabled'] = $this->loadingMessageEnabled->toArray();
        }
        if (isset($this->_usedProperties['loadingMessages'])) {
            $output['loading_messages'] = $this->loadingMessages->toArray();
        }

        return $output;
    }

}
