# yaml-language-server: $schema=../vendor/symfony/dependency-injection/Loader/schema/services.schema.json

# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.
# See also https://symfony.com/doc/current/service_container/import.html

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
parameters: {}

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.

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

    App\Doctor\Controller\DoctorController:
        arguments:
            $projectDir: '%kernel.project_dir%'

    App\Clinic\Controller\ClinicController:
        arguments:
            $projectDir: '%kernel.project_dir%'

    App\UserProfile\Controller\UserProfileController:
        arguments:
            $projectDir: '%kernel.project_dir%'

    App\Auth\Service\OtpService:
        arguments:
            $otpTtl: '%env(int:OTP_TTL)%'
            $appEnv: '%kernel.environment%'

    App\Auth\Service\TokenService:
        arguments:
            $refreshTokenTtl: '%env(int:REFRESH_TOKEN_TTL)%'

    App\Auth\Security\PasswordAuthenticator:
        arguments:
            $refreshTokenTtl: '%env(int:REFRESH_TOKEN_TTL)%'
            $loginLimiter: '@limiter.login'

    App\Auth\Controller\AuthController:
        arguments:
            $sendCodeLimiter: '@limiter.send_code'
            $verifyCodeLimiter: '@limiter.verify_code'
            $tokenIssueLimiter: '@limiter.token_issue'
            $passwordResetLimiter: '@limiter.password_reset'

    App\Payment\Gateway\MellatGateway:
        arguments:
            $terminalId: '%env(default::MELLAT_TERMINAL_ID)%'
            $username:   '%env(default::MELLAT_USERNAME)%'
            $password:   '%env(default::MELLAT_PASSWORD)%'

    App\Payment\Gateway\SepGateway:
        arguments:
            $terminalId: '%env(default::SEP_TERMINAL_ID)%'

    App\Payment\Controller\PaymentController:
        arguments:
            $appBaseUrl: '%env(APP_BASE_URL)%'
            $allowedFrontendHosts: '%env(ALLOWED_FRONTEND_HOSTS)%'

    App\Sms\Provider\KavehNegarProvider:
        arguments:
            $apiKey: '%env(default::KAVENEGAR_API_KEY)%'
            $sender: '%env(default::KAVENEGAR_SENDER)%'

    App\Sms\Provider\RanginehProvider:
        arguments:
            $apiKey: '%env(default::RANGINEH_API_KEY)%'
            $sender: '%env(default::RANGINEH_SENDER)%'

    App\Blog\Controller\BlogController:
        arguments:
            $projectDir: '%kernel.project_dir%'

    App\Insurance\Controller\InsuranceController:
        arguments:
            $projectDir: '%kernel.project_dir%'

    App\ClinicInvitation\Service\ClinicInvitationService:
        arguments:
            $appUrl: '%env(APP_BASE_URL)%'

    App\Sms\Controller\SmsWalletController:
        arguments:
            $appBaseUrl: '%env(APP_BASE_URL)%'
