<?php

namespace Symfony\Config\Flysystem\StorageConfig;

require_once __DIR__.\DIRECTORY_SEPARATOR.'Local'.\DIRECTORY_SEPARATOR.'PermissionsConfig.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 LocalConfig 
{
    private $directory;
    private $lock;
    private $skipLinks;
    private $lazyRootCreation;
    private $permissions;
    private $_usedProperties = [];

    /**
     * Directory path for local storage
     * @default null
     * @param ParamConfigurator|mixed $value
     * @return $this
     */
    public function directory($value): static
    {
        $this->_usedProperties['directory'] = true;
        $this->directory = $value;

        return $this;
    }

    /**
     * Lock flags for file operations
     * @default 0
     * @param ParamConfigurator|int $value
     * @return $this
     */
    public function lock($value): static
    {
        $this->_usedProperties['lock'] = true;
        $this->lock = $value;

        return $this;
    }

    /**
     * Whether to skip symbolic links
     * @default false
     * @param ParamConfigurator|bool $value
     * @return $this
     */
    public function skipLinks($value): static
    {
        $this->_usedProperties['skipLinks'] = true;
        $this->skipLinks = $value;

        return $this;
    }

    /**
     * Whether to create the root directory lazily
     * @default false
     * @param ParamConfigurator|bool $value
     * @return $this
     */
    public function lazyRootCreation($value): static
    {
        $this->_usedProperties['lazyRootCreation'] = true;
        $this->lazyRootCreation = $value;

        return $this;
    }

    /**
     * Unix permissions configuration for files and directories
     * @default {"file":{"public":420,"private":384},"dir":{"public":493,"private":448}}
     */
    public function permissions(array $value = []): \Symfony\Config\Flysystem\StorageConfig\Local\PermissionsConfig
    {
        if (null === $this->permissions) {
            $this->_usedProperties['permissions'] = true;
            $this->permissions = new \Symfony\Config\Flysystem\StorageConfig\Local\PermissionsConfig($value);
        } elseif (0 < \func_num_args()) {
            throw new InvalidConfigurationException('The node created by "permissions()" has already been initialized. You cannot pass values the second time you call permissions().');
        }

        return $this->permissions;
    }

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

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

        if (array_key_exists('skip_links', $config)) {
            $this->_usedProperties['skipLinks'] = true;
            $this->skipLinks = $config['skip_links'];
            unset($config['skip_links']);
        }

        if (array_key_exists('lazy_root_creation', $config)) {
            $this->_usedProperties['lazyRootCreation'] = true;
            $this->lazyRootCreation = $config['lazy_root_creation'];
            unset($config['lazy_root_creation']);
        }

        if (array_key_exists('permissions', $config)) {
            $this->_usedProperties['permissions'] = true;
            $this->permissions = new \Symfony\Config\Flysystem\StorageConfig\Local\PermissionsConfig($config['permissions']);
            unset($config['permissions']);
        }

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

    public function toArray(): array
    {
        $output = [];
        if (isset($this->_usedProperties['directory'])) {
            $output['directory'] = $this->directory;
        }
        if (isset($this->_usedProperties['lock'])) {
            $output['lock'] = $this->lock;
        }
        if (isset($this->_usedProperties['skipLinks'])) {
            $output['skip_links'] = $this->skipLinks;
        }
        if (isset($this->_usedProperties['lazyRootCreation'])) {
            $output['lazy_root_creation'] = $this->lazyRootCreation;
        }
        if (isset($this->_usedProperties['permissions'])) {
            $output['permissions'] = $this->permissions->toArray();
        }

        return $output;
    }

}
