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

	<parameters>
	    <parameter key="officebrain_brand_api.class">OfficeBrain\Bundle\ProductBundle\ApiClient\BrandApiClient</parameter>
        <parameter key="officebrain_brand_api_manager.class">OfficeBrain\Bundle\ProductBundle\Manager\Service\BrandApiManager</parameter>
		<parameter key="officebrain_product_api.class">OfficeBrain\Bundle\ProductBundle\ApiClient\ProductApiClient</parameter>		
		<parameter key="office_brain_product_detail.product_manager">OfficeBrain\Bundle\ProductBundle\Manager\Service\ProductDetailService</parameter>
		<parameter key="officebrain_product_admin_manager.class">OfficeBrain\Bundle\ProductBundle\Manager\Service\ProductAdminManager</parameter>
		<parameter key="officebrain.entity.brand.mapping.class">OfficeBrain\Bundle\ProductBundle\Entity\BrandMapping</parameter>
		<parameter key="officebrain.entity.product.category.mapping.class">OfficeBrain\Bundle\ProductBundle\Entity\ProductCategoryMapping</parameter>
		<parameter key="officebrain_distributor_admin_manager.class">OfficeBrain\Bundle\ProductBundle\Manager\Service\DistributorAdminManager</parameter>
	</parameters>
	<services>
		<!-- PRODUCT -->
		<service id="product.twig_extension" class="OfficeBrain\Bundle\ProductBundle\Twig\ProductExtention" public="false">
	        <tag name="twig.extension" />
	    </service>
	    
	    <service id="officebrain.product.category.mapping.entity.manager" class="Doctrine\ORM\EntityManager"
            factory-service="doctrine" factory-method="getManagerForClass">
            <argument>%officebrain.entity.product.category.mapping.class%</argument>
        </service>
        
        <service id="officebrain.product.category.mapping.repository"
            class="OfficeBrain\Bundle\ProductBundle\Entity\ProductCategoryMappingRepository"
            factory-service="officebrain.product.category.mapping.entity.manager" factory-method="getRepository">
            <argument>%officebrain.entity.product.category.mapping.class%</argument>
        </service>
	    
		<service id="office_brain_product_api" class="%officebrain_product_api.class%" scope="request">
			<argument type="service" id="request" />
			<argument>%api.base_url%</argument>
			<argument>%api.access_token%</argument>
			<argument>%api.default_version%</argument>
            <argument>%api.available_call_to_override%</argument>
			<argument type="service" id="service_container" />
		</service>
		<service id="office_brain_product_detail_factory" class="%office_brain_product_detail.product_manager%"/>
		
		<service id="office_brain_product_detail_manager" class="%office_brain_product_detail.product_manager%" scope='request'>
            <factory service="office_brain_product_detail_factory" method="initFactory"/>
             <argument type="service" id="request"/>             
             <argument type="service" id="office_brain_product_api" />
             <argument type="service" id="service_container" />
             <argument type="service" id="office_brain_common_library" />
             <argument type="service" id="doctrine.orm.entity_manager" />
             <argument type="service" id="officebrain_category_api_manager"/>
        </service>
	    
    	<service id="office_brain_product_admin_manager" class="%officebrain_product_admin_manager.class%" scope="request">
	    	<argument type="service" id="request" />
	    	<argument type="service" id="service_container" />
	    	<argument type="service" id="office_brain_product_api" />
	    	<argument type="service" id="officebrain.product.category.mapping.repository" />
	    </service>
	    
	    <!-- DISTRIBUTOR MANAGER -->
	    <service id="officebrain_distributor_admin_manager" class="%officebrain_distributor_admin_manager.class%" scope="request">
	    	<argument type="service" id="request" />
	    	<argument type="service" id="service_container" />
	    	<argument type="service" id="doctrine.orm.entity_manager"/>
	    	<argument type="service" id="office_brain_product_api" />
	    </service>
	    
	       <!-- BRAND MANAGER -->
        <service id="officebrain_brand_api" class="%officebrain_brand_api.class%" scope="request">
            <argument type="service" id="request" />
            <argument>%api.base_url%</argument>
            <argument>%api.access_token%</argument>
            <argument>%api.default_version%</argument>
            <argument>%api.available_call_to_override%</argument>
        </service>
        
        <service id="officebrain.brand.mapping.entity.manager" class="Doctrine\ORM\EntityManager"
            factory-service="doctrine" factory-method="getManagerForClass">
            <argument>%officebrain.entity.brand.mapping.class%</argument>
        </service>
        
        <service id="officebrain.brand.mapping.repository"
            class="OfficeBrain\Bundle\ProductBundle\Entity\BrandMappingRepository"
            factory-service="officebrain.brand.mapping.entity.manager" factory-method="getRepository">
            <argument>%officebrain.entity.brand.mapping.class%</argument>
        </service>
        
        <service id="officebrain_brand_api_manager" class="%officebrain_brand_api_manager.class%" scope="request">
            <argument type="service" id="request" />
            <argument type="service" id="officebrain_brand_api" />
            <argument type="service" id="officebrain_image_api_manager" />
            <argument type="service" id="officebrain.brand.mapping.entity.manager" />
            <argument type="service" id="officebrain.brand.mapping.repository" />
            <argument type="service" id="service_container" />
        </service>
        <!--  end of Brand Manager -->
	</services>
</container>
