"""Dashboard routes — list available widgets from active plugins (Task 5.25)."""

from __future__ import annotations

from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession

from app.core.db import get_db
from app.deps import require_permission
from app.plugins.registry import get_registry

router = APIRouter(prefix="/api/v1/dashboard", tags=["dashboard"])


@router.get("/widgets")
async def list_dashboard_widgets(
    db: AsyncSession = Depends(get_db),
    current_user: dict = Depends(require_permission("dashboard:read")),
):
    """List all available dashboard widgets from active plugins.

    Returns a flat list of widget definitions contributed by active plugins,
    sorted by their order field. Each widget includes the contributing plugin name.
    """
    registry = get_registry()
    manifests = await registry.get_active_manifests(db)

    widgets: list[dict] = []
    for manifest in manifests:
        for widget in manifest.get("dashboard_widgets", []):
            widget_copy = dict(widget)
            widget_copy["plugin_name"] = manifest["name"]
            widgets.append(widget_copy)

    # Sort by order field
    widgets.sort(key=lambda w: w.get("order", 100))

    return {"items": widgets, "total": len(widgets)}
