# 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:
    locale: 'en'                # Set the default language to use her
    timezone: 'Europe/Berlin'
    partdb_title: 'Part-DB'     # The title shown inside of Part-DB (e.g. in the navbar and on homepage)
    banner: '%env(trim:string:BANNER)%'    # The info text shown in the homepage, if empty config/banner.md is used
    use_gravatar: true          # Set to false, if no Gravatar images should be used for user profiles.
    default_currency: 'EUR'     # The currency that should be used
    media_directory: 'public/media/' # The folder where uploaded attachment files are saved
    secure_media_directory: 'uploads/' # The folder where secured attachment files are saved (must not be in public/)
    global_theme: ''            # The theme to use globally (see public/build/themes/ for choices). Set to '' for default bootstrap theme
    # Allow users to download attachments to server. Warning: This can be dangerous, because via that feature attackers maybe can access ressources on your intranet!
    allow_attachments_downloads: false
    demo_mode: '%env(bool:DEMO_MODE)%' # If set to true, all potentially dangerous things are disabled (like changing passwords of the own user)
    sender_email: 'noreply@partdb.changeme' # The email address from which all emails are sent from
    sender_name: 'Part-DB Mailer' # The name that will be used for all mails sent by Part-DB
    allow_email_pw_reset: '%env(validMailDSN:MAILER_DSN)%' # Config if users are able, to reset their password by email. By default this enabled, when a mail server is configured.
    locale_menu: ['en', 'de', 'fr', 'ru'] # The languages that are shown in user drop down menu
    # If this option is activated, IP addresses are anonymized to be GPDR compliant
    gpdr_compliance: true


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.
        bind:
            bool $demo_mode: '%demo_mode%'
            bool $gpdr_compliance : '%gpdr_compliance%'
            bool $kernel_debug: '%kernel.debug%'
            string $kernel_cache_dir: '%kernel.cache_dir%'

    # 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']

    App\EventSubscriber\MailFromListener:
        tags: ['kernel.event_subscriber']
        arguments:
            $email: '%sender_email%'
            $name: '%sender_name%'

    App\Services\LogSystem\EventLogger:
        arguments:
            # By default only log events which has minimum info level (debug levels are not logged)
            # 7 is lowest level (debug), 0 highest (emergency
            $minimum_log_level: 6
            # Event classes specified here are not saved to DB
            $blacklist: []
            # Only the event classes specified here are saved to DB (set to []) to log all events
            $whitelist: []


    Liip\ImagineBundle\Service\FilterService:
        alias: 'liip_imagine.service.filter'

    app.doctrine.elementListener:
        class: App\Security\EntityListeners\ElementPermissionListener
        public: false
        autowire: true
        tags:
            - { name: "doctrine.orm.entity_listener" }

    App\EventSubscriber\EventLoggerSubscriber:
        arguments:
            $save_changed_fields: '%env(bool:HISTORY_SAVE_CHANGED_FIELDS)%'
            $save_changed_data: '%env(bool:HISTORY_SAVE_CHANGED_DATA)%'
            $save_removed_data: '%env(bool:HISTORY_SAVE_REMOVED_DATA)%'
        tags:
            - { name: 'doctrine.event_subscriber' }

    App\EventSubscriber\MigrationListener:
        tags:
            - { name: 'doctrine.event_subscriber' }


    tree_invalidation_listener:
        class: App\EntityListeners\TreeCacheInvalidationListener
        tags:
            - { name: doctrine.orm.entity_listener }

    attachment_delete_listener:
        class: App\EntityListeners\AttachmentDeleteListener
        tags:
            - name: doctrine.orm.entity_listener

    # Dont use JSONSerializable Interface,
    serializer.normalizer.json_serializable:
        class: Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer
        tags:
          - {name: serializer.normalizer, priority: -9000}

    App\Controller\RedirectController:
        arguments:
            $default_locale: '%locale%'
            $enforce_index_php: '%env(bool:NO_URL_REWRITE_AVAILABLE)%'

    App\Command\UpdateExchangeRatesCommand:
        arguments:
            $base_current: '%default_currency%'

    App\Form\Type\CurrencyEntityType:
        arguments:
            $base_currency: '%default_currency%'

    App\Services\PricedetailHelper:
        arguments:
            $base_currency: '%default_currency%'

    App\Services\MoneyFormatter:
      arguments:
        $base_currency: '%default_currency%'

    App\Form\AttachmentFormType:
        arguments:
            $allow_attachments_downloads: '%allow_attachments_downloads%'

    App\Services\Attachments\AttachmentSubmitHandler:
        arguments:
            $allow_attachments_downloads: '%allow_attachments_downloads%'
            $mimeTypes: '@mime_types'

    App\Form\UserSettingsType:
        arguments:
            $demo_mode: '%demo_mode%'

    App\EventSubscriber\TimezoneListener:
        arguments:
            $timezone: '%timezone%'

    App\Controller\SecurityController:
        arguments:
            $allow_email_pw_reset: '%allow_email_pw_reset%'

    App\Services\Attachments\AttachmentPathResolver:
        arguments:
            $project_dir: '%kernel.project_dir%'
            $media_path: '%media_directory%'
            $secure_path: '%secure_media_directory%'
            $footprints_path: 'public/img/footprints'
            $models_path: null

    App\Services\Attachments\FileTypeFilterTools:
        arguments:
            $mimeTypes: '@mime_types'

    App\Services\TFA\BackupCodeGenerator:
        arguments:
            $code_length: 8
            $code_count: 15

    App\Services\TranslationExtractor\PermissionExtractor:
        tags:
            - { name: 'translation.extractor', alias: 'permissionExtractor'}