import logging
from flask import g, current_app
from .interface import DatabaseInterface

logger = logging.getLogger(__name__)


class FlaskDatabaseManager:
    """Flask-Integration für Thread-Safe Database Management"""

    def __init__(self, database_factory_func):
        self.database_factory_func = database_factory_func

    def get_db(self) -> DatabaseInterface:
        """
        Holt die Datenbank-Instanz für den aktuellen Request
        Verwendet Flask's 'g' object für request-lokale Speicherung
        """
        if 'database' not in g:
            g.database = self.database_factory_func()
            g.database.connect()
            g.database.create_user_table()
            logger.debug("Database instance created for request")

        return g.database

    def close_db(self, error=None):
        """
        Schließt die Datenbank-Verbindung am Ende des Requests
        """
        database = g.pop('database', None)
        if database is not None:
            database.disconnect()
            logger.debug("Database connection closed for request")

    def init_app(self, app):
        """Registriert die Database-Manager-Funktionen bei Flask"""
        app.teardown_appcontext(self.close_db)