import os

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from common_logging import LoggingMiddleware, get_logger, setup_logging

from .api.v1 import plugins, tenants
from .core.plugin_loader import PluginLoader
from .services.plugin_registry import plugin_registry

setup_logging(log_file=os.getenv("LOG_FILE"))
logger = get_logger("saas_portal")

app = FastAPI(title='SaaS Portal API')
app.add_middleware(LoggingMiddleware)
app.add_middleware(CORSMiddleware, allow_origins=['*'], allow_credentials=True, allow_methods=['*'], allow_headers=['*'])

@app.on_event('startup')
async def startup_event():
    logger.info("SaaS Portal API starting up")

@app.on_event('shutdown')
async def shutdown_event():
    logger.info("SaaS Portal API shutting down")

loader = PluginLoader('../../industry_accelerator')
loaded_plugins = loader.load_all_plugins()
logger.info(f"Loaded {len(loaded_plugins)} plugins")
for plugin_name, plugin in loaded_plugins.items():
    try:
        plugin_registry.register(plugin)
        metadata = plugin.get_metadata()
        app.include_router(plugin.get_router(), prefix=metadata.backend_routes_prefix, tags=[metadata.name])
        logger.bind(plugin=plugin_name, prefix=metadata.backend_routes_prefix).info(f"Plugin registered successfully: {plugin_name}")
    except Exception as e:
        logger.bind(plugin=plugin_name).opt(exception=e).error(f"Failed to register plugin: {plugin_name}")
app.include_router(tenants.router, prefix='/api/v1', tags=['tenants'])
app.include_router(plugins.router, prefix='/api/v1', tags=['plugins'])

@app.get('/')
async def root():
    return {'message': 'SaaS Portal API'}

@app.get('/health')
async def health():
    return {'status': 'ok'}
