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

parameters:
    lexik_form_filter.get_filter.doctrine_orm.class: Wallabag\CoreBundle\Event\Subscriber\CustomDoctrineORMSubscriber

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: true
        bind:
            $rootDir: '%kernel.root_dir%'
            $debug: '%kernel.debug%'
            $defaultLocale: '%kernel.default_locale%'
            $wallabagUrl: '%domain_name%'
            $tablePrefix: "%database_table_prefix%"
            $defaultTheme: '%wallabag_core.theme%'
            $encryptionKeyPath: "%wallabag_core.site_credentials.encryption_key_path%"
            $fetchingErrorMessageTitle: "%wallabag_core.fetching_error_message_title%"
            $fetchingErrorMessage: '%wallabag_core.fetching_error_message%'
            $languages: '%wallabag_core.languages%'
            $lifeTime: '%wallabag_core.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'')'
            $themes: '%liip_theme.themes%'

    Wallabag\AnnotationBundle\:
        resource: '../../src/Wallabag/AnnotationBundle/*'
        exclude: '../../src/Wallabag/AnnotationBundle/{Controller,Entity}'

    Wallabag\ApiBundle\:
        resource: '../../src/Wallabag/ApiBundle/*'
        exclude: '../../src/Wallabag/ApiBundle/{Controller,Entity}'

    Wallabag\CoreBundle\:
        resource: '../../src/Wallabag/CoreBundle/*'
        exclude: '../../src/Wallabag/CoreBundle/{Controller,Entity}'

    Wallabag\ImportBundle\:
        resource: '../../src/Wallabag/ImportBundle/*'
        exclude: '../../src/Wallabag/ImportBundle/{Consumer,Controller,Redis}'

    Wallabag\UserBundle\:
        resource: '../../src/Wallabag/UserBundle/*'
        exclude: '../../src/Wallabag/UserBundle/{Controller,Entity}'

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

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

    Doctrine\Persistence\ManagerRegistry:
        alias: doctrine

    Craue\ConfigBundle\Util\Config:
        alias: craue_config

    JMS\Serializer\SerializerInterface:
        alias: jms_serializer

    Lexik\Bundle\FormFilterBundle\Filter\FilterBuilderUpdaterInterface:
        alias: lexik_form_filter.query_builder_updater

    Liip\ThemeBundle\ActiveTheme:
        alias: liip_theme.active_theme

    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

    Twig_Extensions_Extension_Text:
        class: Twig_Extensions_Extension_Text

    MatomoTwigExtension\MatomoTwigExtension:
        public: false

    Wallabag\CoreBundle\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\CoreBundle\ParamConverter\UsernameFeedTokenConverter:
        tags:
            - { name: request.param_converter, converter: username_feed_token_converter }

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

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

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

    wallabag_core.http_client:
        alias: 'httplug.client.wallabag_core'

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

    # service alias override
    bd_guzzle_site_authenticator.site_config_builder:
        alias: Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder

    Wallabag\CoreBundle\Helper\HttpClientFactory:
        calls:
            - ["addSubscriber", ["@bd_guzzle_site_authenticator.authenticator_subscriber"]]

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

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

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

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

    Wallabag\CoreBundle\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\CoreBundle\Controller\ExceptionController: ~

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

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

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

    wallabag_core.entry.download_images.client:
        alias: 'httplug.client.wallabag_core.entry.download_images'

    Wallabag\UserBundle\EventListener\CreateConfigListener:
        arguments:
            $theme: "%wallabag_core.theme%"
            $itemsOnPage: "%wallabag_core.items_on_page%"
            $feedLimit: "%wallabag_core.feed_limit%"
            $language: "%wallabag_core.language%"
            $readingSpeed: "%wallabag_core.reading_speed%"
            $actionMarkAsRead: "%wallabag_core.action_mark_as_read%"
            $listMode: "%wallabag_core.list_mode%"

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

    wallabag_import.pocket.client:
        alias: 'httplug.client.wallabag_import.pocket.client'

    Wallabag\ImportBundle\Import\PocketImport:
        calls:
            - [ setClient, [ "@wallabag_import.pocket.client" ] ]
        tags:
            -  { name: wallabag_import.import, alias: pocket }

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

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

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

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

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

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

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

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

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