<?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="office_brain_user.user_service">OfficeBrain\Bundle\UserBundle\Manager\Service\UserService</parameter>
        <parameter key="office_brain_user.sign_up_service">OfficeBrain\Bundle\UserBundle\Manager\Service\SignUpService</parameter>
        <parameter key="office_brain_user.login_service">OfficeBrain\Bundle\UserBundle\Manager\Service\LoginService</parameter>
    	<parameter key="office_brain_user.contact_book_service">OfficeBrain\Bundle\UserBundle\Manager\Service\ContactBookService</parameter>
    	<parameter key="blank_array" type="collection">        </parameter>
    	<parameter key="office_brain_user_api.class">OfficeBrain\Bundle\UserBundle\ApiClient\ApiClient</parameter>
    	<parameter key="office_brain_user.bios_service">OfficeBrain\Bundle\UserBundle\Manager\Service\BiosService</parameter>
    </parameters>
    
    

    <services>
        
        <service id="office_brain_user_api" class="%office_brain_user_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_user.admin_authentication_handler" class="OfficeBrain\Bundle\UserBundle\Handler\AdminAuthenticationHandler">
            <argument type="service" id="security.context"></argument>
            <argument type="service" id="session"></argument>
            <argument type="service" id="router"></argument>
        </service>
        
        <service id="officebrain_user.authentication_handler" class="OfficeBrain\Bundle\UserBundle\Handler\AuthenticationHandler">
            <argument type="service" id="security.context"></argument>
            <argument type="service" id="session"></argument>
            <argument type="service" id="router"></argument>
            <argument type="service" id="office_brain_common_library"></argument>
            <argument type="service" id="officebrain_user.user_repository"/>
            <!-- <argument type="service" id="security.token_storage"></argument> -->
        </service>
        
        <service id="officebrain_user.failure_handler" class="OfficeBrain\Bundle\UserBundle\Handler\FailureHandler" >
            <argument type="service" id="http_kernel"></argument>
            <argument type="service" id="security.http_utils"></argument>
            <argument>%blank_array%</argument>
            <argument type="service" id="logger"></argument>
            <tag name="monolog.logger" channel="security"/>
        </service>
        
        <service id="officebrain_user.user_repository" class="OfficeBrain\Bundle\UserBundle\Entity\UserRepository" public="false">
            <factory service="doctrine" method="getRepository"/>
            <argument>OfficeBrain\Bundle\UserBundle\Entity\User</argument>
        </service>
        
        <service id="officebrain_access_management.instance_master_repository" class="OfficeBrain\Bundle\AccessManagementBundle\Entity\InstanceMasterRepository" public="false">
            <factory service="doctrine" method="getRepository"/>
            <argument>OfficeBrain\Bundle\AccessManagementBundle\Entity\InstanceMaster</argument>
        </service>
        
        
        <service id="officebrain_user.user_provider.email" class="OfficeBrain\Bundle\UserBundle\Provider\UserProvider" public="false">
            <argument type="service" id="service_container"/>
            <argument type="service" id="officebrain_user.user_repository"/>
            <argument type="service" id="officebrain_access_management.instance_master_repository"/>
        </service>
        
        <service id="user.password.encoder" class="OfficeBrain\Bundle\UserBundle\Service\CustomPasswordEncoder"></service>
        
        
        <service id="office_brain_user.logout_listner" class="OfficeBrain\Bundle\UserBundle\Event\LogoutSuccessEvent">
            <argument type="service" id="security.context"></argument>
            <argument type="service" id="router"></argument>
        </service>
        
        <service id="office_brain_user.admin_logout_listner" class="OfficeBrain\Bundle\UserBundle\Event\AdminLogoutSuccessEvent">
            <argument type="service" id="security.context"></argument>
            <argument type="service" id="router"></argument>
        </service>
        
        <service id="office_brain_user.admin_service_group_listner" class="OfficeBrain\Bundle\UserBundle\Event\AdminServiceGroupEvent">
            <tag name="doctrine.event_listener" event="preSoftDelete" />
            <argument type="service" id="service_container" />
            
        </service>
        
        <service id="office_brain_user_factory" class="%office_brain_user.user_service%"/>

        <service id="office_brain_user_manager" class="%office_brain_user.user_service%" scope='request'>
            <factory service="office_brain_user_factory" method="initFactory"/>
             <argument type="service" id="doctrine.orm.entity_manager"/>
             <argument type="service" id="request"/>
             <argument type="service" id="office_brain_session_manager"/>
             <argument type="service" id="knp_paginator"/>
             <argument type="service" id="office_brain_user_api" />
             <argument type="service" id="office_brain_service_group_manager" />
             <argument type="service" id="jms_serializer" />
             <argument type="service" id="office_brain_core_manager" />
             <argument type="service" id="office_brain_email_service"/>
             <argument type="service" id="router"></argument>
        </service>
        
        
        <service id="office_brain_user_contact_book_factory" class="%office_brain_user.contact_book_service%"/>
     	
        <service id="office_brain_user_contact_book_manager" class="%office_brain_user.contact_book_service%" scope="request">
        	 <factory service="office_brain_user_contact_book_factory" method="initFactory"/>
             <argument type="service" id="doctrine.orm.entity_manager"/>
             <argument type="service" id="request"/>
             <argument type="service" id="office_brain_session_manager"/>
             <argument type="service" id="knp_paginator"/>
        </service>
        
        <service id="office_brain_user_sign_up_factory" class="%office_brain_user.sign_up_service%"/>

        <service id="office_brain_user_sign_up_manager" class="%office_brain_user.sign_up_service%" scope='request'>
            <factory service="office_brain_user_sign_up_factory" method="initFactory"/>
             <argument type="service" id="doctrine.orm.entity_manager"/>
             <argument type="service" id="request"/>
             <argument type="service" id="office_brain_session_manager"/>
             <argument type="service" id="office_brain_email_service"/>
             <argument type="service" id="router"></argument>
        </service>
        
        <service id="office_brain_user_login_factory" class="%office_brain_user.login_service%"/>

        <service id="office_brain_user_login_manager" class="%office_brain_user.login_service%" scope='request'>
            <factory service="office_brain_user_login_factory" method="initFactory"/>
             <argument type="service" id="doctrine.orm.entity_manager"/>
             <argument type="service" id="request"/>
             <argument type="service" id="office_brain_session_manager"/>
             <argument type="service" id="office_brain_email_service"/>
             <argument type="service" id="router"></argument>
        </service>

         <service id="office_brain_user_authenticator" class="OfficeBrain\Bundle\UserBundle\Security\UserAuthenticator">
            <argument type="service" id="user.password.encoder" />
            <!-- argument type="service" id="user.password.encoder" /-->
        </service>
        
        <service id="wsse.security.authentication.provider" class="OfficeBrain\Bundle\UserBundle\Security\Authentication\Provider\WsseProvider"  public="false">
            <argument type="service" id="officebrain_user.user_provider.email" />
            <argument>%kernel.cache_dir%/security/nonces</argument>
        </service>
        
        <service id="wsse.security.authentication.listener" class="OfficeBrain\Bundle\UserBundle\Security\Firewall\WsseListener"  public="false">
            <argument type="service" id="security.token_storage" />
            <argument type="service" id="security.authentication.manager" />
        </service>
        
        <service id="office_brain_user_bios_factory" class="%office_brain_user.bios_service%"/>
     	
        <service id="office_brain_bios_manager" class="%office_brain_user.bios_service%" scope="request">
        	 <factory service="office_brain_user_bios_factory" method="initFactory"/>
             <argument type="service" id="doctrine.orm.entity_manager"/>
             <argument type="service" id="request"/>
             <argument type="service" id="office_brain_session_manager"/>
        </service>
        
    </services>
   
</container>
