<?xml version="1.0" ?>

<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="api_platform.elasticsearch.client" class="Elasticsearch\Client" public="false" />

        <service id="api_platform.elasticsearch.metadata.resource.metadata_factory.operation" class="ApiPlatform\Core\Bridge\Elasticsearch\Metadata\Resource\Factory\ElasticsearchOperationResourceMetadataFactory" decorates="api_platform.metadata.resource.metadata_factory" decoration-priority="10" public="false">
            <argument type="service" id="api_platform.elasticsearch.metadata.resource.metadata_factory.operation.inner" />
        </service>

        <service id="api_platform.elasticsearch.cache.metadata.document" parent="cache.system" public="false">
            <tag name="cache.pool" />
        </service>

        <service id="api_platform.elasticsearch.metadata.document.metadata_factory" alias="api_platform.elasticsearch.metadata.document.metadata_factory.configured" />

        <service id="ApiPlatform\Elasticsearch\Metadata\Document\Factory\DocumentMetadataFactoryInterface" alias="api_platform.elasticsearch.metadata.document.metadata_factory" />

        <service id="ApiPlatform\Core\Bridge\Elasticsearch\Metadata\Document\Factory\DocumentMetadataFactoryInterface" alias="api_platform.elasticsearch.metadata.document.metadata_factory" />

        <service id="api_platform.elasticsearch.metadata.document.metadata_factory.configured" class="ApiPlatform\Elasticsearch\Metadata\Document\Factory\ConfiguredDocumentMetadataFactory" public="false">
            <argument>%api_platform.elasticsearch.mapping%</argument>
        </service>

        <service id="api_platform.elasticsearch.metadata.document.metadata_factory.attribute" class="ApiPlatform\Elasticsearch\Metadata\Document\Factory\AttributeDocumentMetadataFactory" decorates="api_platform.elasticsearch.metadata.document.metadata_factory" decoration-priority="20" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.retro_compatible" />
            <argument type="service" id="api_platform.elasticsearch.metadata.document.metadata_factory.attribute.inner" />
        </service>

        <service id="api_platform.elasticsearch.metadata.document.metadata_factory.cat" class="ApiPlatform\Elasticsearch\Metadata\Document\Factory\CatDocumentMetadataFactory" decorates="api_platform.elasticsearch.metadata.document.metadata_factory" decoration-priority="10" public="false">
            <argument type="service" id="api_platform.elasticsearch.client" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.retro_compatible" />
            <argument type="service" id="api_platform.elasticsearch.metadata.document.metadata_factory.cat.inner" />
        </service>

        <service id="api_platform.elasticsearch.metadata.document.metadata_factory.cached" class="ApiPlatform\Elasticsearch\Metadata\Document\Factory\CachedDocumentMetadataFactory" decorates="api_platform.elasticsearch.metadata.document.metadata_factory" decoration-priority="-10" public="false">
            <argument type="service" id="api_platform.elasticsearch.cache.metadata.document" />
            <argument type="service" id="api_platform.elasticsearch.metadata.document.metadata_factory.cached.inner" />
        </service>

        <service id="api_platform.elasticsearch.name_converter.inner_fields" class="ApiPlatform\Elasticsearch\Serializer\NameConverter\InnerFieldsNameConverter" public="false">
            <argument type="service" id="api_platform.name_converter" on-invalid="ignore" />
        </service>

        <service id="api_platform.elasticsearch.item_data_provider" class="ApiPlatform\Core\Bridge\Elasticsearch\DataProvider\ItemDataProvider" public="false">
            <argument type="service" id="api_platform.elasticsearch.client" />
            <argument type="service" id="api_platform.elasticsearch.metadata.document.metadata_factory" />
            <argument type="service" id="api_platform.elasticsearch.identifier_extractor" />
            <argument type="service" id="serializer" />
            <argument type="service" id="api_platform.metadata.resource.metadata_factory" />

            <tag name="api_platform.item_data_provider" priority="5" />
        </service>

        <service id="api_platform.elasticsearch.collection_data_provider" class="ApiPlatform\Core\Bridge\Elasticsearch\DataProvider\CollectionDataProvider" public="false">
            <argument type="service" id="api_platform.elasticsearch.client" />
            <argument type="service" id="api_platform.elasticsearch.metadata.document.metadata_factory" />
            <argument type="service" id="api_platform.elasticsearch.identifier_extractor" />
            <argument type="service" id="serializer" />
            <argument type="service" id="api_platform.pagination.legacy" />
            <argument type="service" id="api_platform.metadata.resource.metadata_factory" />
            <argument type="tagged" tag="api_platform.elasticsearch.request_body_search_extension.collection" />

            <tag name="api_platform.collection_data_provider" priority="5" />
        </service>
        <service id="api_platform.elasticsearch.identifier_extractor" class="ApiPlatform\Core\Bridge\Elasticsearch\Api\IdentifierExtractor" public="false">
            <argument type="service" id="api_platform.identifiers_extractor.legacy" />
        </service>
        <service id="ApiPlatform\Core\Bridge\Elasticsearch\Api\IdentifierExtractorInterface" alias="api_platform.elasticsearch.identifier_extractor" />

    </services>

</container>
