from rest_framework import serializers

from .models import Menu


class MenuSerializer(serializers.ModelSerializer):
    """Admin CRUD representation of a single menu row (flat)."""

    class Meta:
        model = Menu
        fields = [
            "id", "name", "route", "icon", "parent",
            "sort_order", "permission_code", "is_active",
        ]


class MenuNodeSerializer(serializers.ModelSerializer):
    """One node in the filtered sidebar tree. `children` is attached in the view."""

    children = serializers.SerializerMethodField()

    class Meta:
        model = Menu
        fields = ["id", "name", "route", "icon", "sort_order", "permission_code", "children"]

    def get_children(self, obj):
        kids = getattr(obj, "_visible_children", [])
        return MenuNodeSerializer(kids, many=True).data
