# 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
    app_locales: en|de|it|fr|es|ru|ar|hu|pt_BR|sv|ja|sk

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.
        public: false       # Allows optimizing the container by removing unused services; this also means
                            # fetching services directly from the container via $container->get() won't work.
                            # The best practice is to be explicit about your dependencies anyway.
        bind:
            $projectDirectory: '%kernel.project_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,Constants.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']

    # ================================================================================
    # APPLICATION CORE
    # ================================================================================

    App\EventSubscriber\RedirectToLocaleSubscriber:
        arguments: ['@router', '%app_locales%', '%locale%']

    App\Repository\WidgetRepository:
        arguments:
            $widgets: '%kimai.widgets%'

    App\Controller\DashboardController:
        arguments:
            $dashboard: '%kimai.dashboard%'

    App\Configuration\LanguageFormattings:
        arguments: ['%kimai.languages%']

    App\Configuration\TimesheetConfiguration:
        arguments:
            $settings: '%kimai.timesheet%'

    App\Configuration\CalendarConfiguration:
        arguments:
            $settings: '%kimai.calendar%'

    App\Configuration\FormConfiguration:
        arguments:
            $settings: '%kimai.defaults%'

    App\Configuration\SystemConfiguration:
        arguments:
            $settings: '%kimai.config%'

    App\Configuration\ThemeConfiguration:
        arguments:
            $settings: '%kimai.theme%'

    App\Configuration\LdapConfiguration:
        arguments: ['%kimai.ldap%']

    App\Utils\MPdfConverter:
        arguments: ['%kernel.cache_dir%']

    App\Plugin\PluginManager:
        arguments: [!tagged kimai.plugin]

    App\Export\ServiceExport:
        arguments: [!tagged export.renderer]

    App\Widget\WidgetService:
        arguments:
            $renderer: !tagged widget.renderer

    # ================================================================================
    # DATABASE
    # ================================================================================

    # updates timesheet records and apply configured rate & rounding rules
    App\Doctrine\TimesheetSubscriber:
        class: App\Doctrine\TimesheetSubscriber
        arguments: [!tagged timesheet.calculator]
        tags:
            - { name: doctrine.event_subscriber, priority: 50 }

    # make sure, that sqlite supports foreign keys and cascade deletes
    App\Doctrine\SqliteSessionInitSubscriber:
        class: App\Doctrine\SqliteSessionInitSubscriber
        tags:
            - { name: doctrine.event_listener, event: postConnect }

    # ================================================================================
    # FORMS
    # ================================================================================

    App\Form\Type\LanguageType:
        arguments: ['%app_locales%']

    # ================================================================================
    # THEME
    # ================================================================================

    KevinPapst\AdminLTEBundle\Helper\ContextHelper:
        alias: admin_lte_theme.context_helper

    # ================================================================================
    # TIMESHEET RECORD CALCULATOR
    # ================================================================================

    App\Timesheet\Calculator\DurationCalculator:
        arguments: ['%kimai.timesheet.rounding%']

    App\Timesheet\Calculator\RateCalculator:
        arguments: ['%kimai.timesheet.rates%']

    # ================================================================================
    # SECURITY & VOTER
    # ================================================================================

    App\Security\RoleService:
        arguments: ['%security.role_hierarchy.roles%']

    App\Security\RolePermissionManager:
        arguments: ['%kimai.permissions%']

    # ================================================================================
    # LDAP
    # ================================================================================

    kimai_ldap.security.authentication.provider:
        class: App\Ldap\LdapAuthenticationProvider
        arguments: ['@App\Security\UserChecker', '', '', '', '@App\Configuration\LdapConfiguration', '%security.authentication.hide_user_not_found%']

    # ================================================================================
    # REPOSITORIES
    # ================================================================================

    App\Repository\TimesheetRepository:
        class:     Doctrine\ORM\EntityRepository
        factory:   ['@doctrine.orm.entity_manager', getRepository]
        arguments: ['App\Entity\Timesheet']

    App\Repository\UserRepository:
        class:     Doctrine\ORM\EntityRepository
        factory:   ['@doctrine.orm.entity_manager', getRepository]
        arguments: ['App\Entity\User']

    App\Repository\ActivityRepository:
        class:     Doctrine\ORM\EntityRepository
        factory:   ['@doctrine.orm.entity_manager', getRepository]
        arguments: ['App\Entity\Activity']

    App\Repository\ProjectRepository:
        class:     Doctrine\ORM\EntityRepository
        factory:   ['@doctrine.orm.entity_manager', getRepository]
        arguments: ['App\Entity\Project']

    App\Repository\TagRepository:
        class:     Doctrine\ORM\EntityRepository
        factory:   ['@doctrine.orm.entity_manager', getRepository]
        arguments: ['App\Entity\Tag']

    App\Repository\CustomerRepository:
        class:     Doctrine\ORM\EntityRepository
        factory:   ['@doctrine.orm.entity_manager', getRepository]
        arguments: ['App\Entity\Customer']

    App\Repository\InvoiceTemplateRepository:
        class:     Doctrine\ORM\EntityRepository
        factory:   ['@doctrine.orm.entity_manager', getRepository]
        arguments: ['App\Entity\InvoiceTemplate']

    App\Repository\ConfigurationRepository:
        class:     Doctrine\ORM\EntityRepository
        factory:   ['@doctrine.orm.entity_manager', getRepository]
        arguments: ['App\Entity\Configuration']

    App\Repository\InvoiceDocumentRepository:
        class: App\Repository\InvoiceDocumentRepository
        arguments: ['%kimai.invoice.documents%']
