from users.models import UserPermissions

def assigned_menu_context(request):
    return {
        'assigned_menu': ['COMPANY', 'DASHBOARD'],  # Replace with user-specific logic if needed
    }


# users/context_processors.py
def sidebar_context(request):
    assigned_menu = request.session.get('assigned_menu', [])
    # Simple flag: if any 'REPORT_*' is present, show "Reports" section
    has_report_rights = any(code.startswith('REPORT_') for code in assigned_menu)

    # Do not compute can_* here—do it per-view with get_module_perms (avoids recursion issues)
    return {
        'assigned_menu': assigned_menu,
        'has_report_rights': has_report_rights,
    }


def sidebar_menus(request):
    if not request.user.is_authenticated:
        return {"sidebar_menus": []}

    permissions = (
        UserPermissions.objects
        .filter(ref_user=request.user)
        .select_related("ref_menu", "ref_menu__parent")
    )

    menus = {}
    for perm in permissions:
        menu = perm.ref_menu
        if not (perm.can_view or perm.can_add or perm.can_edit or perm.can_delete or perm.can_export):
            continue

        if menu.parent_id is None:
            if menu.id not in menus:
                menus[menu.id] = {
                    "id": menu.id,
                    "name": menu.menu_name,
                    "url": menu.menu_url,
                    "submenus": []
                }
        else:
            parent_id = menu.parent_id
            if parent_id not in menus:
                parent = menu.parent
                menus[parent_id] = {
                    "id": parent.id,
                    "name": parent.menu_name,
                    "url": parent.menu_url,
                    "submenus": []
                }
            menus[parent_id]["submenus"].append({
                "id": menu.id,
                "name": menu.menu_name,
                "url": menu.menu_url
            })

    return {"sidebar_menus": list(menus.values())}
