from flask import Flask, render_template, session
from flask_cors import CORS
from mongoengine import connect,disconnect
from config import Config
from routes.auth import auth_bp
from routes.exam_manager import exams_bp
from routes.mock_test import mock_test_bp
from routes.old_papers import old_papers_bp
from routes.video_courses import video_courses_bp
from routes.ebooks import ebooks_bp
from routes.notfication_routes import notification_bp
import logging
from routes.image_routes import image_routes
from routes.image_upload import upload_bp
from routes.mcq import savemcq_bp
from routes.qna import qna_bp
from routes.mcq_extraction import extractor_bp
from routes.educoins_topup import educoins_topup_bp
from routes.coupons_routes import coupon_bp
from routes.user_auth import user_bp
from datetime import timedelta
from routes.payments import payments_bp
from routes.courses import courses_bp
from routes.cart import cart_bp
from routes.video_routes import video_gen_bp
from routes.metadata_routes import metadata_routes
from routes.faq import faq_bp
from routes.subscription import subscription_bp
from routes.site_configurations import site_config_bp
from routes.contact_us import contact_bp
from routes.page_slug import homepage_bp

# Ensure logs show up even from blueprints and utils
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s [%(levelname)s] %(message)s',
)

def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)
    CORS(app)

    # Connect to MongoDB
    disconnect(alias='default')
    connect(host=app.config['MONGO_URI'])
    app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=30)  # Remember me duration

    @app.context_processor
    def inject_user():
        return {
            "user": session.get("user"),
            "app_url": app.config.get("MY_APP_URL")
        }

    # Register Blueprints
    app.register_blueprint(exams_bp, url_prefix='/api')
    app.register_blueprint(auth_bp, url_prefix='/api')
    app.register_blueprint(mock_test_bp, url_prefix='/api/mock_test')
    app.register_blueprint(old_papers_bp, url_prefix='/api/old_papers')
    app.register_blueprint(video_courses_bp, url_prefix='/api/video_courses')
    app.register_blueprint(ebooks_bp, url_prefix='/api/ebooks')
    app.register_blueprint(notification_bp, url_prefix='/api')
    app.register_blueprint(image_routes, url_prefix='/api/')
    app.register_blueprint(upload_bp, url_prefix='/api')
    app.register_blueprint(savemcq_bp, url_prefix='/api')
    app.register_blueprint(qna_bp, url_prefix='/api')
    app.register_blueprint(educoins_topup_bp, url_prefix='/api')
    app.register_blueprint(coupon_bp, url_prefix='/api')
    app.register_blueprint(courses_bp, url_prefix='/api')
    app.register_blueprint(extractor_bp, url_prefix='/user')
    app.register_blueprint(payments_bp, url_prefix='/api')
    app.register_blueprint(user_bp)
    
    app.register_blueprint(cart_bp, url_prefix='/api')
    app.register_blueprint(video_gen_bp, url_prefix='/user/video_generation')
    app.register_blueprint(metadata_routes, url_prefix='/user/dropdown')
    app.register_blueprint(faq_bp, url_prefix='/api')
    app.register_blueprint(subscription_bp, url_prefix='/api')
    app.register_blueprint(site_config_bp,url_prefix="/api")
    app.register_blueprint(contact_bp, url_prefix='/api')
    app.register_blueprint(homepage_bp, url_prefix='/api')
    return app

app = create_app()  
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5001)