from flask import Flask
from flask_injector import FlaskInjector
from injector import Binder, singleton
from domain.TestRepository import TestRepository
from infrastructure.TestRepositoryImpl import TestRepositoryImpl
from presentation.blueprint import get_blueprint


def configure(binder: Binder):
    _: type[TestRepository] = TestRepositoryImpl
    binder.bind(interface=TestRepository, to=TestRepositoryImpl, scope=singleton)


def create_app():
    app = Flask(__name__)
    bp = get_blueprint()
    app.register_blueprint(bp)

    FlaskInjector(app, [configure])
    return app


app = create_app()