from flask import Flask

from .extensions import db, login_manager


def create_app():
    app = Flask(__name__)

    # Configuration
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///db.sqlite"
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
    app.config["SECRET_KEY"] = "supersecretkey"

    # Initialize extensions
    db.init_app(app)
    login_manager.init_app(app)
    login_manager.login_view = "auth.login"
    login_manager.login_message = "Veuillez vous connecter pour accéder à cette page."

    # Models need to be imported so tables are created
    from .models import Score, Solution, Users

    with app.app_context():
        db.create_all()

    # User loader
    @login_manager.user_loader
    def load_user(user_id):
        return Users.query.get(int(user_id))

    # Blueprints
    from .main import bp as main_bp

    app.register_blueprint(main_bp)

    from .auth import bp as auth_bp

    app.register_blueprint(auth_bp)

    from .admin import bp as admin_bp

    app.register_blueprint(admin_bp)

    return app
