from django.urls import reverse, NoReverseMatch
from django.urls import reverse


def nav_links(request):
    return {
        "nav_items": [
            {"name": "Home", "url": "home"},
            {"name": "Shop", "url": "shop"},
            {"name": "Blogs", "url": "blog"},
            {"name": "FAQs", "url": "faq_page"},
            {"name": "Cargo / Shipment", "url": "cargo_info"},
            {"name": "About Us", "url": "about_us"},
            {"name": "Contact", "url": "contact"},
        ]
    }


def sidebar_links(request):
    if not request.user.is_authenticated:
        return {}

    from django.urls import reverse, NoReverseMatch

    def can(perm):
        return request.user.has_perm(perm)

    def safe_reverse(name):
        try:
            return reverse(name)
        except NoReverseMatch:
            return "#"

    sidebar = [
        {
            "label": "Dashboard",
            "icon": "fas fa-home",
            "url": safe_reverse("admin_page"),
            "show": True
        },
        {
            "label": "Cargo",
            "icon": "fas fa-truck",
            "submenu_id": "cargoMenu",
            "show": can('cargo.view_invoice') or can('cargo.view_expensecategory'),
            "children": [
                {"label": "Invoices", "url": safe_reverse(
                    "invoice_list"), "show": can('cargo.view_invoice')},
                {"label": "Item List", "url": safe_reverse(
                    "item_list"), "show": can('cargo.view_item')},
                {"label": "Add Expense", "url": safe_reverse(
                    "expense_list"), "show": can('cargo.view_addexpense')},
                {"label": "Expense Category", "url": safe_reverse(
                    "expense_category_list"), "show": can('cargo.view_expensecategory')},
            ]
        },
        {
            "label": "Products",
            "icon": "fas fa-box",
            "submenu_id": "productsMenu",
            "show": can('website.view_product') or can('website.add_product'),
            "children": [
                {"label": "All Products", "url": safe_reverse(
                    "product_list"), "show": can('website.view_product')},
                {"label": "Categories", "url": safe_reverse(
                    "category_list"), "show": can('website.view_category')},
            ]
        },
        {
            "label": "Shop",
            "icon": "fas fa-shop",
            "submenu_id": "shopMenu",
            "show": can('website.view_order') or can('website.add_order'),
            "children": [
                {"label": "All Orders", "url": safe_reverse(
                    "order_list"), "show": can('website.view_order')},
                {"label": "Categories", "url": safe_reverse(
                    "category_list"), "show": can('website.view_category')},
            ]
        },
        {
            "label": "Users",
            "icon": "fas fa-users",
            "submenu_id": "usersMenu",
            "show": can('auth.view_user') or can('auth.view_group'),
            "children": [
                {"label": "All Users", "url": "#",
                    "show": can('auth.view_user')},
                {"label": "Add User", "url": "#",
                    "show": can('auth.add_user')},
                {"label": "Roles", "url": "#", "show": can('auth.view_group')},
            ]
        },
        {
            "label": "Reports",
            "icon": "fas fa-chart-bar",
            "submenu_id": "reportsMenu",
            "show": can('cargo.view_invoice') or can('cargo.sales_report'),
            "children": [
                {"label": "Sales Report", "url": safe_reverse(
                    "cargo:invoice_report"), "show": can('cargo.sales_report')},
                {"label": "Expenses Report", "url": safe_reverse(
                    "cargo:expense_report"), "show": can('cargo.expense_report')},
            ]
        },
        {
            "label": "Settings",
            "icon": "fas fa-cog",
            "url": "#",
            "show": request.user.is_superuser
        }
    ]

    # Optional: Hide menus with no visible children
    for item in sidebar:
        if "children" in item:
            visible_children = [
                child for child in item["children"] if child["show"]]
            item["children"] = visible_children
            item["show"] = item["show"] and bool(visible_children)

    return {"sidebar_links": sidebar}
