from flask import Flask, current_app,session
from flask_bootstrap import Bootstrap
from account.google_auth import google_bp        # ✅ this is your actual Google blueprint
from account.auth import auth
from account.main_routes import main
from account.model import mongo
from config import Config
from bson import ObjectId

from Seller.main_routes import seller_bp
from User.main_routes import user_bp

from dotenv import load_dotenv
import os

load_dotenv()


# ❌ REMOVE or comment this if you only want to run KMeans manually
# from kmeans_pipeline import run_kmeans_pipeline

def create_app():
    app = Flask(
        __name__,
        template_folder='account/templates',
        static_folder='account/static'
    )

    app.config.from_object(Config)
    mongo.init_app(app)
    os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'

    @app.before_request
    def before_request_actions():
        if not hasattr(app, '_mongo_checked'):
            try:
                print("🔌 Testing MongoDB connection...")
                mongo.cx.admin.command('ping')
                print("✅ MongoDB is connected!")
            except Exception as e:
                print("❌ MongoDB connection failed:", e)
            app._mongo_checked = True

        current_app.db = mongo.db

    Bootstrap(app)

    app.register_blueprint(auth, url_prefix='/auth')
    app.register_blueprint(main)
    app.register_blueprint(google_bp, url_prefix="/login")
    app.register_blueprint(seller_bp, url_prefix='/seller')
    app.register_blueprint(user_bp, url_prefix='/')

    @app.context_processor
    def inject_user():

        db = current_app.db

        print("👤 inject_user running. Session ID:", session.get('user_id'))

        user = None
        if 'user_id' in session:
            user = db['Users'].find_one({'_id': ObjectId(session['user_id'])})
            if user:
                user['fullname'] = user.get('fullname') or f"{user.get('first_name', '')} {user.get('last_name', '')}".strip()

        return dict(user=user)

    return app




if __name__ == '__main__':
    app = create_app()
    app.run(debug=True)
