<?php

namespace domain\User\User;

use domain\_\AbstractModule;

class UserModule extends AbstractModule
{
    public function getServices(): array
    {
        return [
            UserDefinition::class,
            UserSolver::class,
            UserRepositoryQuery::class,
            UserRepository::class,
            UserBuilder::class,
            UserNotifier::class,
            UsersCreditCsvGenerator::class,
            NewsletterManager::class,
            AuthorizationChecker::class,
            UserBulkImporter::class,
            UserManager::class,
        ];
    }

    public function getDefinition(): UserDefinition
    {
        return UserDefinition::getInstance();
    }

    public function getSolver(): UserSolver
    {
        return UserSolver::getInstance();
    }

    public function getRepository(): UserRepository
    {
        return UserRepository::getInstance();
    }

    public function getBuilder(): UserBuilder
    {
        return UserBuilder::getInstance();
    }

    public function getNotifier(): UserNotifier
    {
        return UserNotifier::getInstance();
    }

    public function getUsersCreditCsvGenerator(): UsersCreditCsvGenerator
    {
        return UsersCreditCsvGenerator::getInstance();
    }

    public function getNewsletterManager(): NewsletterManager
    {
        return NewsletterManager::getInstance();
    }

    public function getAuthorizationChecker(): AuthorizationChecker
    {
        return AuthorizationChecker::getInstance();
    }

    public function getBulkImporter(): UserBulkImporter
    {
        return UserBulkImporter::getInstance();
    }

    public function getManager(): UserManager
    {
        return UserManager::getInstance();
    }
}