from fastapi import APIRouter, HTTPException
from pydantic import BaseModel

from ...services.plugin_registry import plugin_registry
from ...services.tenant_service import tenant_service

from common_logging import get_logger

logger = get_logger(__name__)

router = APIRouter()

class PluginAction(BaseModel):
    tenant_id: int
    plugin_name: str

@router.get('/plugins')
async def list_plugins():
    plugins = plugin_registry.list_plugins()
    return {'plugins': [p.__dict__ for p in plugins]}

@router.post('/plugins/enable')
async def enable_plugin(action: PluginAction):
    try:
        tenant_service.enable_plugin(action.tenant_id, action.plugin_name)
        logger.bind(plugin_name=action.plugin_name, tenant_id=action.tenant_id).info("Plugin enabled")
        return {'status': 'enabled'}
    except ValueError as e:
        logger.bind(plugin_name=action.plugin_name, tenant_id=action.tenant_id).warning("Plugin enable failed")
        raise HTTPException(status_code=400, detail=str(e)) from None

@router.post('/plugins/disable')
async def disable_plugin(action: PluginAction):
    try:
        tenant_service.disable_plugin(action.tenant_id, action.plugin_name)
        logger.bind(plugin_name=action.plugin_name, tenant_id=action.tenant_id).info("Plugin disabled")
        return {'status': 'disabled'}
    except ValueError as e:
        logger.bind(plugin_name=action.plugin_name, tenant_id=action.tenant_id).warning("Plugin disable failed")
        raise HTTPException(status_code=400, detail=str(e)) from None
