# Generated by Karigor CLI & Optimized for 100+ Developers
import importlib
import pkgutil
import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

# ১. FastAPI অ্যাপ অবজেক্ট তৈরি
app = FastAPI(
    title="Karigor Enterprise API",
    description="Automated Feature-Driven Backend for 100+ Developers",
    version="1.0.0"
)

# ২. CORS মিডলওয়্যার কনফিগারেশন
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# ৩. ডাইনামিক রাউটার রেজিস্ট্রেশন ফাংশন (The Magic Loop)
def register_features():
    print("🤖 Karigor Engine: Scanning and registering features...")
    
    # 'app.features' প্যাকেজের পাথ খুঁজে বের করা হচ্ছে
    try:
        features_package = importlib.import_module("app.features")
    except ModuleNotFoundError:
        print("⚠️ 'app.features' ফোল্ডারটি পাওয়া যায়নি। ডাইনামিক রেজিস্ট্রেশন স্কিপ করা হলো।")
        return

    # features/ ফোল্ডারের ভেতরের সব সাব-ফোল্ডার (মডিউল) অটো-স্ক্যান করা হচ্ছে
    for _, module_name, is_pkg in pkgutil.iter_modules(features_package.__path__):
        if is_pkg:
            try:
                # প্রতিটি ফিচারের router মডিউল ডাইনামিকালি ইমপোর্ট করা হচ্ছে (যেমন: app.features.auth.router)
                router_module = importlib.import_module(f"app.features.{module_name}.router")
                
                # যদি ওই মডিউলে 'router' অবজেক্ট থাকে, তবে তা FastAPI-তে রেজিস্টার করা হবে
                if hasattr(router_module, "router"):
                    app.include_router(router_module.router)
                    print(f"✅ Successfully registered feature: [{module_name.upper()}]")
                else:
                    print(f"⚠️ Warning: 'router' object not found in app.features.{module_name}.router")
            except ModuleNotFoundError:
                # কোনো ফিচারে যদি এখনো router.py তৈরি না হয়ে থাকে, তবে এটি স্কিপ করবে
                print(f"ℹ️ Feature '{module_name}' has no router.py file yet. Skipping registration.")
            except Exception as e:
                print(f"❌ Error loading feature '{module_name}': {str(e)}")

# অ্যাপ্লিকেশন স্টার্ট হওয়ার আগে লুপটি রান করানো হচ্ছে
register_features()

# ৪. হেলথ চেক এন্ডপয়েন্ট
@app.get("/health", tags=["System"])
async def health_check():
    return {"status": "healthy", "engine": "Karigor CLI v1.0"}

# ৫. মেইন এক্সিকিউশন ব্লক
def main():
    print("🚀 Starting Karigor App via Uvicorn...")
    # 'app.main:app' স্ট্রিং ফরম্যাটে দেওয়া হয়েছে যাতে Uvicorn-এর --reload মোড পারফেক্টলি কাজ করে
    uvicorn.run("app.main:app", host="127.0.0.1", port=8000, reload=True)

if __name__ == '__main__':
    main()
