services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: true
        bind:
            # tout les paramètres $projectDir seront remplacés par la valeur de '%kernel.project_dir%'
            string $projectDir: '%kernel.project_dir%'

    # définit la classe ListExportFileListener comme écouteur de l'évènement kernel.exception
    Hokoha\ListsBundle\EventListener\ListExportFileListener:
        tags: 
            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
        
    # définit la classe ListsExtension comme extension twig
    Hokoha\ListsBundle\Twig\Extension\ListsExtension:
        arguments: [ # auto wiring du constructeur
            '@twig', # récupère l'environnement de twig
            '@pagerfanta.twig_runtime' # récupère le runtime de pagerfanta
        ]
        tags:
          -  { name: twig.extension }

    Hokoha\ListsBundle\ListsFactory:

    Hokoha\ListsBundle\Utils\:
        resource: '../src/Utils'
        public: false

    Hokoha\ListsBundle\Builder\ListBuilderFactory:
    Hokoha\ListsBundle\Builder\ListBuilderRegistry:

    Hokoha\ListsBundle\Wrapper\WrapperFactory:

    Hokoha\ListsBundle\Wrapper\Configuration\ConfigurationFactory:
        arguments: [ # autowiring du constructeur
            '%oka-lists.defaults%', # récupère la configuration par défaut 
            '%oka-lists.lists_config%' # récupère la configuration des listes
        ]

    Hokoha\ListsBundle\Form\FiltersForm:

    # définit la classe ListsDataCollector comme collecteur de données pour le profiler de Symfony
    oka-lists.data_collector:
        class: Hokoha\ListsBundle\DataCollector\ListsDataCollector
        tags: 
            - { name: data_collector, id: lists, template: "@Lists/Collector/data_collector.html.twig" }

    oka-lists.cache:
        parent: cache.app
        tags:
            - { name: cache.pool, namespace: "bundle.lists" }

    # tag les différent adapter d'export avec leur alias pour les retrouver dans le service oka-lists.export_factory
    Hokoha\ListsBundle\Wrapper\Export\CsvExportAdapter:
        tags:
            - { name: oka-lists.export_adapter, alias: csv }
    Hokoha\ListsBundle\Wrapper\Export\XmlExportAdapter:
        tags:
            - { name: oka-lists.export_adapter, alias: xml }
    Hokoha\ListsBundle\Wrapper\Export\ExcelExportAdapter:
        tags:
            - { name: oka-lists.export_adapter, alias: xlsx }
    Hokoha\ListsBundle\Wrapper\Export\HtmlExportAdapter:
        tags:
            - { name: oka-lists.export_adapter, alias: html }

    # Créer le service oka-lists.export_factory qui permet de récupérer les différents adapter d'export
    oka-lists.export_factory:
        class: Hokoha\ListsBundle\Wrapper\Export\ExportFactory
    Hokoha\ListsBundle\Wrapper\Export\ExportFactory:
        alias: oka-lists.export_factory
    Hokoha\ListsBundle\Wrapper\Export\ExportFactoryInterface:
        alias: oka-lists.export_factory

    Hokoha\ListsBundle\Wrapper\Export\DefaultExportFormatter: