# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    # add more service definitions when explicit configuration is needed
    # please note that last definitions always *replace* previous ones
    App\DataPersister\: 
        resource: '../src/DataPersister'
        # Uncomment only if autoconfiguration is disabled
        #tags: [ 'api_platform.data_persister' ]
    'App\DataProvider\ServiceItemDataProvider': ~
        # Uncomment only if autoconfiguration is disabled
        #tags: [ 'api_platform.item_data_provider' ] 
    'App\DataProvider\ApprovisionnementItemDataProvider': ~
        # Uncomment only if autoconfiguration is disabled
        #tags: [ 'api_platform.item_data_provider' ]
    App\DataProvider\ServiceCollectionDataProvider:
        tags: [ { name: 'api_platform.collection_data_provider', priority: 1 } ]
        # Autoconfiguration must be disabled to set a custom priority
        arguments:
            $collectionExtensions: !tagged api_platform.doctrine.orm.query_extension.collection
        autoconfigure: false
    App\DataProvider\EntiteDataProvider:
        tags: [ { name: 'api_platform.collection_data_provider', priority: 2 } ]
        # Autoconfiguration must be disabled to set a custom priority
        arguments:
            $collectionExtensions: !tagged api_platform.doctrine.orm.query_extension.collection
        autoconfigure: false

    App\DataProvider\PartenaireDataProvider:
        tags: [ { name: 'api_platform.collection_data_provider', priority: 2 } ]
        # Autoconfiguration must be disabled to set a custom priority
        arguments:
            $collectionExtensions: !tagged api_platform.doctrine.orm.query_extension.collection
        autoconfigure: false

    App\DataProvider\ServiceDataProvider:
        tags: [ { name: 'api_platform.collection_data_provider', priority: 2 } ]
        # Autoconfiguration must be disabled to set a custom priority
        arguments:
            $collectionExtensions: !tagged api_platform.doctrine.orm.query_extension.collection
        autoconfigure: false

    App\DataProvider\AbonnementCollectionDataProvider:
        tags: [ { name: 'api_platform.collection_data_provider', priority: 1 } ]
        # Autoconfiguration must be disabled to set a custom priority
        arguments:
            $collectionExtensions: !tagged api_platform.doctrine.orm.query_extension.collection
        autoconfigure: false
    
    App\DataProvider\ApprovisionnementDataProvider:
        tags: [ { name: 'api_platform.collection_data_provider', priority: 2 } ]
        # Autoconfiguration must be disabled to set a custom priority
        arguments:
            $collectionExtensions: !tagged api_platform.doctrine.orm.query_extension.collection
        autoconfigure: false
    App\DataProvider\CompteDataProvider:
        tags: [ { name: 'api_platform.collection_data_provider', priority: 1 } ]
        # Autoconfiguration must be disabled to set a custom priority
        arguments:
            $collectionExtensions: !tagged api_platform.doctrine.orm.query_extension.collection
        autoconfigure: false

    App\DataProvider\CommissionDataProvider:
        tags: [ { name: 'api_platform.collection_data_provider', priority: 1 } ]
        # Autoconfiguration must be disabled to set a custom priority
        arguments:
            $collectionExtensions: !tagged api_platform.doctrine.orm.query_extension.collection
        autoconfigure: false


    App\Services\ElasticsearchLogstashHandlerImp:
        # autowire: false
        arguments:
            # $endpoint:
            $index: '%env(CODE_MICROSERVICE)%'
            $level: 200
            $endpoint: '%env(ELASTICSEARCH_HOST)%'

    # monolog.formatter.session_request:
    #     class: Monolog\Formatter\LineFormatter
    #     arguments:
    #         - "[%%datetime%%] [%%extra.token%%] %%channel%%.%%level_name%%: %%message%% %%context%% %%extra%%\n"

    App\Logger\BgRequestProcessor:
        tags:
            - { name: monolog.processor }

    # bg.listener:
    #     class: App\Event\Listener\FlushBGListener
    #     autowire: true
    #     tags:
    #         - { name: doctrine.event_listener, event: onFlush }
    bg.listener:
        class: App\Event\Listener\FlushBGListener
        autowire: true
        tags:
            - { name: doctrine.event_subscriber}

    # App\Event\Listener\ExceptionListener:
    #      tags:
    #          - { name: kernel.event_listener, event: kernel.exception }