<!--
  ~ This file is part of the Alice package.
  ~
  ~ (c) Nelmio <hello@nelm.io>
  ~
  ~ For the full copyright and license information, please view the LICENSE
  ~ file that was distributed with this source code.
  -->

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>

        <service id="nelmio_alice.generator.resolver.value"
                 alias="nelmio_alice.generator.resolver.value.registry" />

        <service id="nelmio_alice.generator.resolver.value.registry"
                 class="Nelmio\Alice\Generator\Resolver\Value\ValueResolverRegistry">
            <!-- Injected via a compiler pass -->
        </service>

        <service id="nelmio_alice.generator.resolver.value.unique_values_pool"
                 class="Nelmio\Alice\Generator\Resolver\UniqueValuesPool" />

        <service id="nelmio_alice.generator.resolver.value.property_accessor" alias="property_accessor" />


        <!-- Chainables -->
        <service id="nelmio_alice.generator.resolver.value.chainable.array_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\ArrayValueResolver">

            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.dynamic_array_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\DynamicArrayValueResolver">
            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.evaluated_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\EvaluatedValueResolver">
            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.faker_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\FakerFunctionCallValueResolver">
            <argument type="service" id="nelmio_alice.faker.generator" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.php_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\PhpFunctionCallValueResolver">
            <argument type="string">%nelmio_alice.functions_blacklist%</argument>
            <argument type="service" id="nelmio_alice.generator.resolver.value.chainable.faker_value_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.function_argument_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\FunctionCallArgumentResolver">
            <argument type="service" id="nelmio_alice.generator.resolver.value.chainable.php_value_resolver" />

            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.fixture_property_reference_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\FixturePropertyReferenceResolver">
            <argument type="service" id="nelmio_alice.property_accessor" />

            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.fixture_method_call_reference_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\FixtureMethodCallReferenceResolver">

            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.fixture_reference_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\FixtureReferenceResolver" />

        <service id="nelmio_alice.generator.resolver.value.chainable.self_fixture_reference_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\SelfFixtureReferenceResolver">
            <argument type="service" id="nelmio_alice.generator.resolver.value.chainable.fixture_reference_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.unresolved_fixture_reference_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\UnresolvedFixtureReferenceIdResolver">
            <argument type="service" id="nelmio_alice.generator.resolver.value.chainable.self_fixture_reference_resolver" />

            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.fixture_wildcard_reference_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\FixtureWildcardReferenceResolver">
            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.list_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\ListValueResolver">
            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.optional_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\OptionalValueResolver">
            <argument type="service" key="$faker" id="nelmio_alice.faker.generator" />
            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.parameter_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\ParameterValueResolver">
            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.unique_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\UniqueValueResolver">
            <argument type="service" id="nelmio_alice.generator.resolver.value.unique_values_pool" />
            <argument>null</argument>
            <argument>%nelmio_alice.max_unique_values_retry%</argument>

            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.value_for_current_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\ValueForCurrentValueResolver">
            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

        <service id="nelmio_alice.generator.resolver.value.chainable.variable_value_resolver"
                 class="Nelmio\Alice\Generator\Resolver\Value\Chainable\VariableValueResolver">
            <tag name="nelmio_alice.generator.resolver.value.chainable_resolver" />
        </service>

    </services>

</container>
