from models.users.user import User
from controllers.database.user import UserController

from flask import redirect, Blueprint, session, url_for

from . import user
from . import product
from . import stats
from . import admin

blueprint = Blueprint('main', __name__)

blueprint.register_blueprint(user.blueprint)
blueprint.register_blueprint(product.product_blueprint)
blueprint.register_blueprint(product.seller_blueprint)
blueprint.register_blueprint(stats.blueprint)
blueprint.register_blueprint(admin.blueprint)


# CONTEXTS #

# Function that returns a given user class based on the ID in the session
@blueprint.context_processor
def get_user() -> dict[User | None]:
    # Get the user based on the user ID
    user_id = session.get('user_id')
    user = None

    if user_id is not None:
        db = UserController()
        user = db.read_id(user_id)

    return dict(user=user)


# Function responsible for displaying the main landing page of the site
@blueprint.route('/')
def index():
    return redirect(url_for('main.products.index'))
