<?php

declare(strict_types=1);

use Apexl\Io\User\Factories\JwtFromRequestServiceFactory;
use Apexl\Io\User\Interfaces\JwtFromRequestServiceFactoryInterface;
use Apexl\Io\User\Interfaces\JwtKeyProviderInterface;
use Apexl\Io\User\Interfaces\MasqueradeServiceInterface;
use Apexl\Io\User\Interfaces\NewUserNotifierInterface;
use Apexl\Io\User\Interfaces\SessionManagerInterface;
use Apexl\Io\User\Interfaces\TokenHasherInterface;
use Apexl\Io\User\Interfaces\UserPasswordHasherInterface;
use Apexl\Io\User\Interfaces\UserPasswordVerifierInterface;
use Apexl\Io\User\Notifiers\NewUserEmailNotifier;
use Apexl\Io\User\Services\DatabaseSessionManager;
use Apexl\Io\User\Services\JwtKeyFromConfigService;
use Apexl\Io\User\Services\NativeTokenHasher;
use Apexl\Io\User\Services\PasswordHashUserPasswordHasher;
use Apexl\Io\User\Services\PasswordVerifyUserPasswordVerifier;
use Apexl\Io\User\Services\SessionMasqueradeService;
use function DI\autowire;

return [
    NewUserNotifierInterface::class => autowire(NewUserEmailNotifier::class),
    JwtKeyProviderInterface::class => autowire(JwtKeyFromConfigService::class),
    TokenHasherInterface::class => autowire(NativeTokenHasher::class),
    UserPasswordHasherInterface::class => autowire(PasswordHashUserPasswordHasher::class),
    UserPasswordVerifierInterface::class => autowire(PasswordVerifyUserPasswordVerifier::class),
    JwtFromRequestServiceFactoryInterface::class => autowire(JwtFromRequestServiceFactory::class),
    SessionManagerInterface::class => autowire(DatabaseSessionManager::class),
    MasqueradeServiceInterface::class => autowire(SessionMasqueradeService::class),
];
