imports:
    - { resource: services_rabbit.yml }
    - { resource: services_redis.yml }
    - { resource: parameters_addons.yml }

parameters:
    spiriit_form_filter.get_filter.doctrine_orm.class: Wallabag\Event\Subscriber\CustomDoctrineORMSubscriber

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: true
        bind:
            $projectDir: '%kernel.project_dir%'
            $debug: '%kernel.debug%'
            $defaultLocale: '%kernel.default_locale%'
            $wallabagUrl: '%domain_name%'
            $tablePrefix: "%database_table_prefix%"
            $encryptionKeyPath: "%wallabag.site_credentials.encryption_key_path%"
            $fetchingErrorMessageTitle: "%wallabag.fetching_error_message_title%"
            $fetchingErrorMessage: '%wallabag.fetching_error_message%'
            $languages: '%wallabag.languages%'
            $lifeTime: '%wallabag.cache_lifetime%'
            $cookieFile: "%kernel.cache_dir%/cookiejar.json"
            $logoPath: 'web/img/appicon/apple-touch-icon-152.png'
            $registrationEnabled: '%fosuser_registration%'
            $restrictedAccess: '@=service(''craue_config'').get(''restricted_access'')'
            $senderEmail: "%scheb_two_factor.email.sender_email%"
            $senderName: "%scheb_two_factor.email.sender_name%"
            $storeArticleHeaders: '@=service(''craue_config'').get(''store_article_headers'')'
            $supportUrl: '@=service(''craue_config'').get(''wallabag_support_url'')'
            $fonts: '%wallabag.fonts%'

    Wallabag\:
        resource: '../../src/*'
        exclude: ['../../src/{Consumer,Controller,Entity,ExpressionLanguage,DataFixtures,Redis}', '../../src/Event/*Event.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
    Wallabag\Controller\:
        resource: '../../src/Controller/'
        tags: ['controller.service_arguments']

    # inject alias service into controllers
    Wallabag\Controller\Import\ChromeController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_chrome_producer'
            $redisProducer: '@wallabag.producer.redis.chrome'

    Wallabag\Controller\Import\DeliciousController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_delicious_producer'
            $redisProducer: '@wallabag.producer.redis.delicious'

    Wallabag\Controller\Import\ElcuratorController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_elcurator_producer'
            $redisProducer: '@wallabag.producer.redis.elcurator'

    Wallabag\Controller\Import\FirefoxController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_firefox_producer'
            $redisProducer: '@wallabag.producer.redis.firefox'

    Wallabag\Controller\Import\InstapaperController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_instapaper_producer'
            $redisProducer: '@wallabag.producer.redis.instapaper'

    Wallabag\Controller\Import\PinboardController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_pinboard_producer'
            $redisProducer: '@wallabag.producer.redis.pinboard'

    Wallabag\Controller\Import\PocketController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_pocket_producer'
            $redisProducer: '@wallabag.producer.redis.pocket'

    Wallabag\Controller\Import\ReadabilityController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_readability_producer'
            $redisProducer: '@wallabag.producer.redis.readability'

    Wallabag\Controller\Import\WallabagV1Controller:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_wallabag_v1_producer'
            $redisProducer: '@wallabag.producer.redis.wallabag_v1'

    Wallabag\Controller\Import\WallabagV2Controller:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_wallabag_v2_producer'
            $redisProducer: '@wallabag.producer.redis.wallabag_v2'

    Wallabag\Controller\Import\ShaarliController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_shaarli_producer'
            $redisProducer: '@wallabag.producer.redis.shaarli'

    Wallabag\Controller\Import\PocketHtmlController:
        arguments:
            $rabbitMqProducer: '@old_sound_rabbit_mq.import_pocket_html_producer'
            $redisProducer: '@wallabag.producer.redis.pocket_html'

    Doctrine\DBAL\Connection:
        alias: doctrine.dbal.default_connection

    Doctrine\ORM\EntityManagerInterface:
        alias: doctrine.orm.entity_manager

    Doctrine\Migrations\Metadata\Storage\TableMetadataStorageConfiguration:
        alias: doctrine.migrations.storage.table_storage

    Doctrine\Persistence\ManagerRegistry:
        alias: doctrine

    Craue\ConfigBundle\Util\Config:
        alias: craue_config

    JMS\Serializer\SerializerInterface:
        alias: jms_serializer

    Spiriit\Bundle\FormFilterBundle\Filter\FilterBuilderUpdaterInterface:
        alias: spiriit_form_filter.query_builder_updater

    Scheb\TwoFactorBundle\Security\TwoFactor\Provider\Google\GoogleAuthenticatorInterface:
        alias: scheb_two_factor.security.google_authenticator

    Symfony\Component\HttpFoundation\Session\SessionInterface:
        alias: session

    Symfony\Component\EventDispatcher\EventDispatcherInterface:
        alias: event_dispatcher

    Symfony\Component\Form\FormFactoryInterface:
        alias: form.factory

    Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface:
        alias: security.token_storage

    Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface:
        alias: security.authorization_checker

    Symfony\Component\Translation\TranslatorInterface:
        alias: translator

    Symfony\Component\Validator\Validator\ValidatorInterface:
        alias: validator

    FOS\UserBundle\Model\UserManagerInterface:
        alias: fos_user.user_manager

    MatomoTwigExtension\MatomoTwigExtension:
        public: false

    ScssPhp\ScssPhp\Compiler:
        public: false

    Wallabag\Event\Listener\UserLocaleListener:
        tags:
            - { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin }

    craue_config_cache_provider:
        class: Symfony\Component\Cache\Adapter\FilesystemAdapter
        public: false
        arguments:
            $namespace: 'craue_config'
            $defaultLifetime: 0
            $directory: '%kernel.cache_dir%'

    Wallabag\ParamConverter\UsernameFeedTokenConverter:
        tags:
            - { name: request.param_converter, converter: username_feed_token_converter }

    Wallabag\Event\Subscriber\TablePrefixSubscriber:
        tags:
            - { name: doctrine.event_subscriber }

    Wallabag\Event\Subscriber\SchemaAdapterSubscriber:
        arguments:
            $databaseTablePrefix: "%database_table_prefix%"
        tags:
            - { name: doctrine.event_subscriber }

    Graby\Graby:
        arguments:
            $config:
                error_message: '%wallabag.fetching_error_message%'
                error_message_title: '%wallabag.fetching_error_message_title%'
        calls:
            - [ setLogger, [ "@logger" ] ]
        tags:
            - { name: monolog.logger, channel: graby }

    Graby\SiteConfig\ConfigBuilder:
        arguments:
            $config: {}

    wallabag.http_client:
        alias: 'httplug.client.wallabag'

    Wallabag\SiteConfig\GrabySiteConfigBuilder:
        tags:
            - { name: monolog.logger, channel: graby }

    # service alias override
    Wallabag\SiteConfig\SiteConfigBuilder:
        alias: Wallabag\SiteConfig\GrabySiteConfigBuilder

    GuzzleHttp\Cookie\CookieJar:
        alias: 'Wallabag\Helper\FileCookieJar'

    Wallabag\Helper\HttpClientFactory:
        calls:
            - ['addSubscriber', ['@Wallabag\Guzzle\AuthenticatorSubscriber']]
            - ['addSubscriber', ['@Wallabag\Guzzle\FixupMondeDiplomatiqueUriSubscriber']]

    RulerZ\RulerZ:
        alias: rulerz

    Wallabag\Operator\PHP\Matches:
        tags:
            - { name: rulerz.operator, target: native, operator: matches }

    Wallabag\Operator\Doctrine\Matches:
        tags:
            - { name: rulerz.operator, target: doctrine, operator: matches, inline: true }

    Wallabag\Operator\PHP\NotMatches:
        tags:
            - { name: rulerz.operator, target: native, operator: notmatches }

    Wallabag\Operator\Doctrine\NotMatches:
        tags:
            - { name: rulerz.operator, target: doctrine, operator: notmatches, inline: true }

    Wallabag\Operator\PHP\PatternMatches:
        tags:
            - { name: rulerz.operator, target: native, operator: "~" }

    Predis\Client:
        arguments:
            $parameters:
                scheme: '%redis_scheme%'
                host: '%redis_host%'
                port: '%redis_port%'
                path: '%redis_path%'
                password: '%redis_password%'

    Wallabag\Event\Subscriber\SQLiteCascadeDeleteSubscriber:
        tags:
            - { name: doctrine.event_subscriber }

    Wallabag\Event\Subscriber\DownloadImagesSubscriber:
        arguments:
            $enabled: '@=service(''craue_config'').get(''download_images_enabled'')'

    Wallabag\Helper\DownloadImages:
        arguments:
            $baseFolder: "%kernel.project_dir%/web/assets/images"

    Wallabag\Command\InstallCommand:
        arguments:
            $databaseDriver: '%database_driver%'
            $defaultSettings: '%wallabag.default_internal_settings%'
            $defaultIgnoreOriginInstanceRules: '%wallabag.default_ignore_origin_instance_rules%'

    Wallabag\Mailer\UserMailer:
        arguments:
            $parameters:
                template:
                    confirmation: '%fos_user.registration.confirmation.template%'
                    resetting: '%fos_user.resetting.email.template%'
                from_email:
                    confirmation: '%fos_user.registration.confirmation.from_email%'
                    resetting: '%fos_user.resetting.email.from_email%'

    Wallabag\Event\Listener\CreateConfigListener:
        arguments:
            $itemsOnPage: "%wallabag.items_on_page%"
            $feedLimit: "%wallabag.feed_limit%"
            $language: "%wallabag.language%"
            $readingSpeed: "%wallabag.reading_speed%"
            $actionMarkAsRead: "%wallabag.action_mark_as_read%"
            $listMode: "%wallabag.list_mode%"
            $displayThumbnails: "%wallabag.display_thumbnails%"

    Wallabag\Event\Listener\AuthenticationFailureListener:
        tags:
            - { name: kernel.event_listener, event: security.authentication.failure, method: onAuthenticationFailure }

    Wallabag\Import\PocketImport:
        calls:
            - [ setClient, [ '@Symfony\Contracts\HttpClient\HttpClientInterface $pocketClient' ] ]
        tags:
            -  { name: wallabag.import, alias: pocket }

    Wallabag\Import\WallabagV1Import:
        tags:
            -  { name: wallabag.import, alias: wallabag_v1 }

    Wallabag\Import\WallabagV2Import:
        tags:
            -  { name: wallabag.import, alias: wallabag_v2 }

    Wallabag\Import\ElcuratorImport:
        tags:
            -  { name: wallabag.import, alias: elcurator }

    Wallabag\Import\ReadabilityImport:
        tags:
            -  { name: wallabag.import, alias: readability }

    Wallabag\Import\InstapaperImport:
        tags:
            -  { name: wallabag.import, alias: instapaper }

    Wallabag\Import\PinboardImport:
        tags:
            -  { name: wallabag.import, alias: pinboard }

    Wallabag\Import\DeliciousImport:
        tags:
            -  { name: wallabag.import, alias: delicious }

    Wallabag\Import\FirefoxImport:
        tags:
            -  { name: wallabag.import, alias: firefox }

    Wallabag\Import\ChromeImport:
        tags:
            -  { name: wallabag.import, alias: chrome }

    Wallabag\Import\ShaarliImport:
        tags:
            -  { name: wallabag.import, alias: shaarli }

    Wallabag\Import\PocketHtmlImport:
        tags:
            -  { name: wallabag.import, alias: pocket_html }

    # to factorize the proximity and bypass translation for prev & next
    pagerfanta.view.default_wallabag:
        class: Pagerfanta\View\OptionableView
        arguments:
            - '@pagerfanta.view.twitter_bootstrap'
            - { proximity: 1, prev_message: "<", next_message: ">" }
        public: false
        tags:
            - { name: pagerfanta.view, alias: default_wallabag }