"""Sidebar menus and submenus used by role permissions."""

from __future__ import annotations

PERMISSION_MENUS: list[dict] = [
    {
        "key": "dashboard",
        "label": "Dashboard",
        "children": [
            {"key": "dashboard.financial", "label": "Financial Dashboard"},
            {"key": "dashboard.accounts", "label": "Chart of Accounts"},
            {"key": "dashboard.vouchers", "label": "Vouchers"},
        ],
    },
    {
        "key": "reports",
        "label": "Reports",
        "children": [
            {"key": "reports.dashboard", "label": "Dashboard"},
            {"key": "reports.stock", "label": "Stock Reports"},
            {"key": "reports.transactions", "label": "Transaction Reports"},
            {"key": "reports.departments", "label": "Department Reports"},
            {"key": "reports.financial", "label": "Financial Reports"},
            {"key": "reports.custom", "label": "Custom Reports"},
            {"key": "reports.ai", "label": "AI Data Agent"},
        ],
    },
    {
        "key": "departments",
        "label": "Departments",
        "children": [
            {"key": "departments.list", "label": "Department List"},
            {"key": "departments.add", "label": "Add Department"},
            {"key": "departments.locations", "label": "Location List"},
            {"key": "departments.locations_add", "label": "Add Location"},
        ],
    },
    {
        "key": "department_issues",
        "label": "Issue to Department",
        "children": [
            {"key": "department_issues.create", "label": "Create Issue"},
            {"key": "department_issues.list", "label": "Issue List"},
            {"key": "department_issues.pending", "label": "Pending Approvals"},
        ],
    },
    {
        "key": "inventory",
        "label": "Inventory",
        "children": [
            {"key": "inventory.item_categories", "label": "Item Category"},
            {"key": "inventory.item_types", "label": "Item Type"},
            {"key": "inventory.item_groups", "label": "Group Items"},
            {"key": "inventory.brands", "label": "Brands"},
            {"key": "inventory.base_units", "label": "Base Units"},
            {"key": "inventory.item_unit_types", "label": "Item Unit Types"},
            {"key": "inventory.items", "label": "Items"},
            {"key": "inventory.item_transactions", "label": "Item Transactions"},
        ],
    },
    {
        "key": "warehouses",
        "label": "Warehouses",
        "children": [
            {"key": "warehouses.list", "label": "Warehouse List"},
            {"key": "warehouses.workflow", "label": "Warehouse Workflow"},
        ],
    },
    {
        "key": "stock_transfers",
        "label": "Stock Transfers",
        "children": [
            {"key": "stock_transfers.list", "label": "All Transfers"},
            {"key": "stock_transfers.create", "label": "Create Transfer"},
            {"key": "stock_transfers.pending", "label": "Pending Approvals"},
        ],
    },
    {
        "key": "purchases",
        "label": "Purchases",
        "children": [
            {"key": "purchases.flow", "label": "Common Flow"},
            {"key": "purchases.vendors", "label": "Vendors / Suppliers"},
            {"key": "purchases.orders", "label": "1. Create Purchase Order"},
            {"key": "purchases.vendor_confirmation", "label": "2. Vendor Confirms PO"},
            {"key": "purchases.grn", "label": "3. Create GRN (Stock In)"},
            {"key": "purchases.invoices", "label": "4. Create Purchase Invoice"},
            {"key": "purchases.payments", "label": "5. Make Payment"},
            {"key": "purchases.closed", "label": "6. Close Purchase Order"},
        ],
    },
    {
        "key": "sales",
        "label": "Sales",
        "children": [
            {"key": "sales.flow", "label": "Sales Order Flow"},
            {"key": "sales.customers", "label": "Customers"},
            {"key": "sales.orders", "label": "1. Create Sales Order"},
            {"key": "sales.confirm", "label": "2. Confirm Sales Order"},
            {"key": "sales.availability", "label": "3. Check Availability"},
            {"key": "sales.reserve", "label": "4. Reserve Stock"},
            {"key": "sales.pick", "label": "5. Pick Items"},
            {"key": "sales.ship", "label": "6. Ship / Deliver"},
            {"key": "sales.invoices", "label": "7. Generate Invoice"},
            {"key": "sales.payments", "label": "8. Receive Payment"},
        ],
    },
    {
        "key": "stock_out",
        "label": "Stock Out",
        "children": [
            {"key": "stock_out.flow", "label": "Stock Out Flow"},
            {"key": "stock_out.delivery", "label": "A. Delivery / GRN"},
            {"key": "stock_out.deduction", "label": "B. Stock Deduction"},
            {"key": "stock_out.inventory", "label": "C. Update Inventory"},
            {"key": "stock_out.transactions", "label": "D. Transaction History"},
            {"key": "stock_out.reports", "label": "E. Update Reports"},
        ],
    },
    {
        "key": "users_roles",
        "label": "Users & Roles",
        "children": [
            {"key": "users_roles.add", "label": "Add User / Role"},
            {"key": "users_roles.users", "label": "Users"},
            {"key": "users_roles.roles", "label": "Roles"},
        ],
    },
    {
        "key": "settings",
        "label": "Settings",
        "children": [
            {"key": "settings.general", "label": "General"},
            {"key": "settings.company", "label": "Company Profile"},
        ],
    },
]

LEGACY_MODULE_ALIASES = {
    "items": "inventory.items",
}


def flatten_permission_menus(menus: list[dict] | None = None) -> list[dict]:
    rows: list[dict] = []
    for menu in menus or PERMISSION_MENUS:
        rows.append({"key": menu["key"], "label": menu["label"]})
        for child in menu.get("children") or []:
            rows.append({"key": child["key"], "label": child["label"]})
    return rows


def all_permission_keys() -> list[str]:
    return [row["key"] for row in flatten_permission_menus()]


def permission_label_map() -> dict[str, str]:
    return {row["key"]: row["label"] for row in flatten_permission_menus()}


def canonical_permission_key(module: str) -> str:
    key = str(module or "").strip()
    return LEGACY_MODULE_ALIASES.get(key, key)
