<?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"
>

    <imports>
        <import resource="services/mapping.xml" />
        <import resource="services/data-loader.xml" />
    </imports>

    <services>

        <service
            id="addiks_rdm.entity_manager_decorator"
            decorates="doctrine.orm.entity_manager"
            class="Addiks\RDMBundle\Doctrine\EntityManagerDecorator"
        >
            <argument type="service" id="addiks_rdm.entity_manager_decorator.inner" />
            <argument type="service" id="addiks_rdm.data_loader" />
        </service>

        <service id="addiks_rdm.listener" class="Addiks\RDMBundle\Doctrine\EventListener">
            <tag name="doctrine.event_listener" event="prePersist" />
            <tag name="doctrine.event_listener" event="postLoad" />
            <tag name="doctrine.event_listener" event="postGenerateSchemaTable" />
            <tag name="doctrine.event_listener" event="postFlush" />
            <tag name="doctrine.event_listener" event="loadClassMetadata" />

            <argument type="service">
                <service class="Addiks\RDMBundle\Hydration\EntityHydratorLazyLoadProxy">
                    <argument type="service" id="service_container" />
                    <argument>addiks_rdm.hydrator</argument>
                </service>
            </argument>
            <argument type="service">
                <service class="Addiks\RDMBundle\Mapping\Drivers\MappingDriverLazyLoadProxy">
                    <argument type="service" id="service_container" />
                    <argument>addiks_rdm.mapping.driver</argument>
                </service>
            </argument>
            <argument type="service">
                <service class="Addiks\RDMBundle\DataLoader\DataLoaderLazyLoadProxy">
                    <argument type="service" id="service_container" />
                    <argument>addiks_rdm.data_loader</argument>
                </service>
            </argument>
        </service>

        <service id="addiks_rdm.hydrator" class="Addiks\RDMBundle\Hydration\EntityHydrator" public="true">
            <argument type="service" id="addiks_rdm.mapping.driver" />
            <argument type="service" id="addiks_rdm.data_loader" />
        </service>

        <service id="addiks_rdm.form.type.service" class="Addiks\RDMBundle\Symfony\FormType\ServiceFormType">
            <tag name="form.type" alias="service" />
            <argument type="service" id="service_container" />
        </service>

        <service id="addiks_rdm.black_magick_cache_warmer" class="Addiks\RDMBundle\Symfony\RDMBlackMagickCacheWarmer">
            <tag name="kernel.cache_warmer" />
            <argument type="service">
                <service class="Doctrine\Persistence\Mapping\Driver\MappingDriver">
                    <factory service="doctrine.orm.default_configuration" method="getMetadataDriverImpl" />
                </service>
            </argument>
            <!-- <argument type="service" id="composer.class_loader" /> -->
            <argument type="service" id="addiks_rdm.mapping.driver" />
            <argument type="service" id="addiks_rdm.data_loader.black_magic" />
            <argument>symfony_rdm_entities</argument>
            <argument>%kernel.project_dir%</argument>
        </service>

    </services>
</container>
