from home.models import CompanyProfile


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("inventory:admin_page"),
            "show": True
        },
        {
            "label": "Sales",
            "icon": "fas fa-store",
            "submenu_id": "WholeSalesMenu",
            "show": can('home.sale_menu'),
            "children": [
                {"label": "Invoices", "icon": "fas fa-file-invoice",
                    "url": safe_reverse("inventory:saleorder_list"), "show": can('inventory.view_saleorder')},
                {"label": "Clients", "icon": "fas fa-user-tag",
                    "url": safe_reverse("inventory:consumer_list"), "show": can('inventory.view_consumer')},
                {"label": "Doctors", "icon": "fas fa-user-md",
                    "url": safe_reverse("inventory:doctor_list"), "show": can('inventory.view_doctor')},
            ]
        },
        {
            "label": "Inventory",
            "icon": "fas fa-box",
            "submenu_id": "productsMenu",
            "show": can('home.inventory_menu'),
            "children": [
                {"label": "Generics", "icon": "fas fa-folder-open",
                    "url": safe_reverse("inventory:collection_list"), "show": can('inventory.view_collection')},
                {"label": "Medicines", "icon": "fas fa-pills",
                    "url": safe_reverse("inventory:product_list"), "show": can('inventory.view_product')},
                {"label": "Orders", "icon": "fas fa-shopping-bag",
                    "url": safe_reverse("inventory:order_list"), "show": can('inventory.view_order')},
                {"label": "Client Pricing", "icon": "fas fa-tags",
                    "url": safe_reverse("inventory:consumer_product_discount_list"), "show": can('inventory.view_consumer')},
                {"label": "Doctor's Margin", "icon": "fas fa-user-md",
                    "url": safe_reverse("inventory:doctor_product_commission_list"), "show": can('inventory.view_consumer')},
                {"label": "Suppliers", "icon": "fas fa-truck",
                    "url": safe_reverse("inventory:supplier_list"),
                    "show": can('inventory.view_supplier')},
            ]
        },
        {
            "label": "Finance",
            "icon": "fas fa-coins",
            "submenu_id": "financeMenu",
            "show": can('home.finance_menu'),
            "children": [
                {"label": "Add Expense", "icon": "fas fa-receipt",
                    "url": safe_reverse("inventory:expense_list"), "show": can('finance.view_addexpense')},
                {"label": "Cash Collection", "icon": "fas fa-hand-holding-usd",
                    "url": safe_reverse('inventory:cash_collection_list'), "show": can('inventory.view_payment_from_consumer')},
                                            ]
        },
        {
            "label": "Users",
            "icon": "fas fa-users",
            "submenu_id": "usersMenu",
            "show": can('home.users_menu'),
            "children": [
                {"label": "All Users", "icon": "fas fa-user",
                    "url": safe_reverse('home:user_list'), "show": can('auth.view_user')},
                {"label": "Add User", "icon": "fas fa-user-plus",
                    "url": safe_reverse('home:user_create'), "show": can('auth.add_user')},
                {"label": "Roles", "icon": "fas fa-user-shield",
                    "url": safe_reverse('home:group_list'), "show": can('auth.view_group')},
            ]
        },
        {
            "label": "Reports",
            "icon": "fas fa-chart-bar",
            "submenu_id": "reportsMenu",
            "show": can('home.reports_menu'),
            "children": [
                {
                    "label": "Stock Report",
                    "icon": "fas fa-boxes",  # Represents inventory/stock
                    "url": safe_reverse("inventory:stock_with_sale_rate"),
                    "show": can('inventory.stock_report')
                },
                {
                    "label": "Sale Report",
                    "icon": "fas fa-chart-line",  # Correct icon for trends/sales over time
                    "url": safe_reverse("inventory:sales_report"),
                    "show": can('inventory.sale_report')
                },
                {
                    "label": "Expenses Report",
                    "icon": "fas fa-file-invoice-dollar",  # Represents expense and financial reporting
                    "url": safe_reverse("finance:expense_report"),
                    "show": can('home.expense_report')
                },
                {
                    "label": "Clients Cash Details",
                    "icon": "fas fa-wallet",  # Clearly represents cash/financial details
                    "url": safe_reverse("inventory:client_cash_report"),
                    "show": can('home.clients_account_report')
                },
                {
                    "label": "General Report",
                    "icon": "fas fa-clipboard-list",  # Alternative to chart-line, for comprehensive/general report
                    "url": safe_reverse("finance:comprehensive_report"),
                    "show": can('home.clients_account_report')
                },
            ]
        },
        {
            "label": "Settings",
            "icon": "fas fa-cog",
            "url": "#",
            "show": can('home.settings_menu'),
        }
    ]

    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}



def company_profile(request):
    profile = CompanyProfile.objects.first()
    return {"company_profile": profile}