import {
  Briefcase,
  Building2,
  CalendarCheck,
  CalendarDays,
  ClipboardList,
  BookText,
  FileText,
  KeyRound,
  LayoutGrid,
  ListChecks,
  PackageCheck,
  Settings,
  Shield,
  ShoppingCart,
  Ticket,
  MessageSquare,
  MessagesSquare,
  Package,
  ReceiptText,
  Store,
  Truck,
  ShoppingBag,
  User,
  Users,
  UsersRound,
  Warehouse,
  FileSpreadsheet,
  BarChart3,
  Tags,
  Layers,
  FileBadge2,
} from "lucide-react";
import { MenuItemProp } from "@/types/navigation/menu";
import type { WorkspacePersona } from "@/lib/workspace-persona";

export const adminMenuItems: MenuItemProp[] = [
  {
    name: "Dashboard",
    href: "/dashboard",
    icon: <LayoutGrid className="size-5" />,
  },
  {
    name: "Employee",
    href: "/employees",
    icon: <Users className="size-5" />,
  },
  {
    name: "Projects",
    href: "/projects",
    icon: <LayoutGrid className="size-5" />,
  },
  {
    name: "Tickets",
    href: "/tickets",
    icon: <Ticket className="size-5" />,
  },
  {
    name: "Department",
    href: "/departments",
    icon: <LayoutGrid className="size-5" />,
  },
  {
    name: "Attendance",
    href: "/attendance",
    icon: <CalendarCheck className="size-5" />,
  },
  {
    name: "Payroll",
    href: "/payroll",
    icon: <CalendarCheck className="size-5" />,
  },
  {
    name: "Job",
    href: "/jobs",
    icon: <Briefcase className="size-5" />,
  },
  {
    name: "Candidate",
    href: "/candidates",
    icon: <UsersRound className="size-5" />,
  },
  {
    name: "Leave",
    href: "/leaves",
    icon: <ClipboardList className="size-5" />,
  },
  {
    name: "Holiday",
    href: "/holidays",
    icon: <CalendarDays className="size-5" />,
  },
  {
    name: "Report",
    href: "/reports",
    icon: <FileText className="size-5" />,
  },
  {
    name: "Settings",
    href: "/settings",
    icon: <Settings className="size-5" />,
  },
];

export const HRMenuItems: MenuItemProp[] = [
  {
    name: "Dashboard",
    href: "/dashboard",
    icon: <LayoutGrid className="size-5" />,
  },
  {
    name: "Employee",
    href: "/employees",
    icon: <Users className="size-5" />,
  },
  {
    name: "Projects",
    href: "/projects",
    icon: <LayoutGrid className="size-5" />,
  },
  {
    name: "Tickets",
    href: "/tickets",
    icon: <Ticket className="size-5" />,
  },
  {
    name: "Department",
    href: "/departments",
    icon: <LayoutGrid className="size-5" />,
  },
  {
    name: "Attendance",
    href: "/attendance",
    icon: <CalendarCheck className="size-5" />,
  },
  {
    name: "Payroll",
    href: "/payroll",
    icon: <CalendarCheck className="size-5" />,
  },
  {
    name: "Job",
    href: "/jobs",
    icon: <Briefcase className="size-5" />,
  },
  {
    name: "Candidate",
    href: "/candidates",
    icon: <UsersRound className="size-5" />,
  },
  {
    name: "Leave",
    href: "/leaves",
    icon: <ClipboardList className="size-5" />,
  },
  {
    name: "Holiday",
    href: "/holidays",
    icon: <CalendarDays className="size-5" />,
  },
  {
    name: "Report",
    href: "/reports",
    icon: <FileText className="size-5" />,
  },
  {
    name: "Chat",
    href: "/chat",
    icon: <MessagesSquare className="size-5" />,
  },
  {
    name: "Settings",
    href: "/settings",
    icon: <Settings className="size-5" />,
  },
];

/** Tenant staff in the HR app shell — link to the client workspace for the same tenant. */
export const HRTenantMenuItems: MenuItemProp[] = [
  {
    name: "Dashboard",
    href: "/dashboard",
    icon: <LayoutGrid className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Employee",
    href: "/employees",
    icon: <Users className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Projects",
    href: "/projects",
    icon: <LayoutGrid className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Tickets",
    href: "/tickets",
    icon: <Ticket className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Department",
    href: "/departments",
    icon: <LayoutGrid className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Attendance",
    href: "/attendance",
    icon: <CalendarCheck className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Payroll",
    href: "/payroll",
    icon: <CalendarCheck className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Job",
    href: "/jobs",
    icon: <Briefcase className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Candidate",
    href: "/candidates",
    icon: <UsersRound className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Leave",
    href: "/leaves",
    icon: <ClipboardList className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Holiday",
    href: "/holidays",
    icon: <CalendarDays className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Report",
    href: "/reports",
    icon: <FileText className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Chat",
    href: "/chat",
    icon: <MessagesSquare className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Setting",
    href: "/settings",
    icon: <Settings className="size-5" />,
    comingSoon: true,
  },
];

/** Dedicated super admin portal (`/super-admin/*`) — no HR modules. */
export const superAdminOnlyMenuItems: MenuItemProp[] = [
  {
    name: "Dashboard",
    href: "/dashboard",
    icon: <LayoutGrid className="size-5" />,
  },
  {
    name: "Users",
    href: "/admin/users",
    icon: <Users className="size-5" />,
  },
  {
    name: "Clients",
    href: "/admin/clients",
    icon: <KeyRound className="size-5" />,
  },
  {
    name: "Permissions",
    href: "/admin/permissions",
    icon: <ListChecks className="size-5" />,
  },
  {
    name: "Roles",
    href: "/admin/roles",
    icon: <Shield className="size-5" />,
  },
  {
    name: "Blogs",
    href: "/admin/blogs",
    icon: <BookText className="size-5" />,
  },
  {
    name: "Products",
    href: "/admin/products",
    icon: <Package className="size-5" />,
  },
  {
    name: "Services",
    href: "/admin/services",
    icon: <Layers className="size-5" />,
  },
  {
    name: "Pages SEO",
    href: "/admin/page-seo",
    icon: <FileBadge2 className="size-5" />,
  },
  {
    name: "Shop orders",
    href: "/admin/shop-orders",
    icon: <ShoppingBag className="size-5" />,
  },
  {
    name: "Social inbox",
    href: "/admin/social-inbox",
    icon: <MessagesSquare className="size-5" />,
  },
  {
    name: "Settings",
    href: "/settings",
    icon: <Settings className="size-5" />,
  },
];

export const InventoryMenuItems: MenuItemProp[] = [
  {
    name: "Dashboard",
    href: "/dashboard",
    icon: <LayoutGrid className="size-5" />,
  },
  {
    name: "Products",
    href: "/products",
    icon: <Package className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Orders",
    href: "/orders",
    icon: <ShoppingCart className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Purchase Order",
    href: "/purchase-orders",
    icon: <PackageCheck className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Stores",
    href: "/stores",
    icon: <Store className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Warehouses",
    href: "/warehouses",
    icon: <Warehouse className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Customers",
    href: "/customers",
    icon: <Users className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Suppliers",
    href: "/suppliers",
    icon: <Truck className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Expenses",
    href: "/expenses",
    icon: <ReceiptText className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Quotations",
    href: "/quotations",
    icon: <FileSpreadsheet className="size-5" />,
    comingSoon: true,
  },
  {
    name: "Billings",
    href: "/billings",
    icon: <Tags className="size-5" />,
  },
  {
    name: "Analytics",
    href: "/analytics",
    icon: <BarChart3 className="size-5" />,
  },
  {
    name: "Shipping Labels",
    href: "/shipping-labels",
    icon: <Ticket className="size-5" />,
  },
  {
    name: "Settings",
    href: "/settings",
    icon: <Settings className="size-5" />,
  },
];

/** Client / tenant workspace (`/client/*`) — scoped by API client id. */
export const ClientMenuItems: MenuItemProp[] = [
  {
    name: "Client dashboard",
    href: "/dashboard",
    icon: <LayoutGrid className="size-5" />,
  },
  {
    name: "Properties",
    href: "/properties",
    icon: <Building2 className="size-5" />,
  },
  {
    name: "Users",
    href: "/users",
    icon: <Users className="size-5" />,
  },
  {
    name: "Roles",
    href: "/roles",
    icon: <Shield className="size-5" />,
  },
  {
    name: "Settings",
    href: "/settings",
    icon: <Settings className="size-5" />,
  },
];

/** @deprecated Use ClientMenuItems */
export const PropertyMenuItems = ClientMenuItems;

const clientComplaintsMenuItem: MenuItemProp = {
  name: "Complaints",
  href: "/complaints",
  icon: <MessageSquare className="size-5" />,
};

const clientChatMenuItem: MenuItemProp = {
  name: "Workspace chat",
  href: "/chat",
  icon: <MessagesSquare className="size-5" />,
};

/** Occupants and management staff: complaints + profile only (logout is on the drawer). */
export const ClientLimitedWorkspaceMenuItems: MenuItemProp[] = [
  clientComplaintsMenuItem,
  {
    name: "Profile",
    href: "/profile",
    icon: <User className="size-5" />,
  },
];

/** Full client workspace sidebar with complaints and chat inserted before Settings. */
export function buildClientWorkspaceMenu(persona: WorkspacePersona): MenuItemProp[] {
  if (persona === "management_staff" || persona === "occupant_tenant") {
    return ClientLimitedWorkspaceMenuItems;
  }
  const settingsIdx = ClientMenuItems.findIndex((m) => String(m.name) === "Settings");
  if (settingsIdx < 0) {
    return [...ClientMenuItems, clientComplaintsMenuItem, clientChatMenuItem];
  }
  const before = ClientMenuItems.slice(0, settingsIdx);
  const after = ClientMenuItems.slice(settingsIdx);
  return [...before, clientComplaintsMenuItem, clientChatMenuItem, ...after];
}
