from __future__ import annotations

from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

from shared.models.menu_node import MenuNode


async def get_navigation_tree(session: AsyncSession) -> list[MenuNode]:
    """
    Return top-level menu nodes ordered by sort_order.

    All apps call this directly (shared DB) — no more HTTP API.
    """
    result = await session.execute(
        select(MenuNode)
        .where(MenuNode.deleted_at.is_(None), MenuNode.depth == 0)
        .order_by(MenuNode.sort_order.asc(), MenuNode.id.asc())
    )
    return list(result.scalars().all())


async def rebuild_navigation(session: AsyncSession) -> None:
    """
    Rebuild menu_nodes from container_relations.

    Called by event handlers when relationships change.
    Currently a no-op placeholder — menu nodes are managed directly
    by the admin UI. When the full relationship-driven nav is needed,
    this will sync ContainerRelation -> MenuNode.
    """
    pass
