# 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

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%"
            $hardLimit: "%kimai.timesheet.active_entries.hard_limit%"

    # 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/{Entity,Migrations,Tests}'

    # 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\Calendar\Service:
        arguments:
            $config: "%kimai.calendar%"

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

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

    App\Twig\MarkdownExtension:
        arguments:
            $timesheetAsMarkdown: "%kimai.timesheet.markdown%"

    App\Controller\Admin\CustomerController:
        arguments:
            $defaults: "%kimai.defaults%"

    App\Utils\LocaleSettings:
        arguments:
            $languageSettings: "%kimai.languages%"

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

    # service that prefixes every database table
    App\Doctrine\TablePrefixSubscriber:
        class: App\Doctrine\TablePrefixSubscriber
        arguments: ["%env(resolve:DATABASE_PREFIX)%"]
        tags:
            - { name: doctrine.event_subscriber }

    # updates timesheet records and apply configured rate & rounding rules
    App\Doctrine\TimesheetSubscriber:
        class: App\Doctrine\TimesheetSubscriber
        arguments: [!tagged timesheet.calculator]
        tags:
            - { name: doctrine.event_listener, event: prePersist, lazy: true }
            - { name: doctrine.event_listener, event: preUpdate, lazy: true }

    # 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\UserRoleType:
        arguments: ["%security.role_hierarchy.roles%"]

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

    App\Form\Extension\DocumentationLinkExtension:
        tags:
            - { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }

    App\Form\Extension\EnhancedChoiceTypeExtension:
        arguments: ["%kimai.theme.select_type%"]
        tags:
            - { name: form.type_extension, extended_type: Symfony\Bridge\Doctrine\Form\Type\EntityType }

    App\Form\TimesheetEditForm:
        arguments:
            $durationOnly: "%kimai.timesheet.duration_only%"

    App\Form\Extension\SelectWithApiDataExtension:
        tags:
            - { name: form.type_extension, extended_type: Symfony\Bridge\Doctrine\Form\Type\EntityType }

    App\Validator\Constraints\TimesheetValidator:
        arguments:
            $ruleset: "%kimai.timesheet.rules%"

    # ================================================================================
    # 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\RolePermissionManager:
        arguments: ["%kimai.permissions%"]

    # ================================================================================
    # 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\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\InvoiceDocumentRepository:
        class: App\Repository\InvoiceDocumentRepository
        arguments: ['%kimai.invoice.documents%']

