from flask import Flask

from app.config import Config
from app.database import engine
from app.models import Base
from app.views import bp
from app.migrations import run_migrations


def create_app(test_config=None):
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_object(Config)

    # Create database tables if they don't exist
    Base.metadata.create_all(engine)

    # Register blueprints
    app.register_blueprint(bp)

    # Run migrations after tables are created
    with app.app_context():
        run_migrations(app)

    return app