"""Containers module."""

from dependency_injector import containers, providers

from . import repositories, handler, messagebus, commands


class Container(containers.DeclarativeContainer):

    rating_repository = providers.Singleton(repositories.RatingRepository)

    command_handler = providers.Singleton(
        handler.CommandHandler,
        rating_repo=rating_repository,
    )

    message_bus = providers.Factory(
        messagebus.MessageBus,
        command_handlers=providers.Dict({
            commands.SaveRating: command_handler.provided.save_rating,
            commands.DoSomethingElse: command_handler.provided.something_else,
        }),
    )