"use client";

import {
  Sidebar,
  SidebarContent,
} from "@/components/ui/sidebar";
import { sidebarItems } from "@/navigation/sidebar/sidebar-items";

import { PermissionsProvider } from "@/components/admins/rbac/hooks/use-permissions";
import type { CurrentUserPermissions } from "@/components/admins/rbac/types";
import { NavUserSkeleton } from "@/components/sidebar/nav-user-skeleton";
import { SidebarShell } from "@/components/sidebar/sidebar-shell";

import { NavMain } from "./nav-main";
import { NavUser } from "./nav-user";

type AppSidebarProps = React.ComponentProps<typeof Sidebar> & {
  currentUser?: CurrentUserPermissions | null;
};

/**
 * Dashboard/admin RBAC sidebar. Customer portal uses `@/components/sidebar/app-sidebar`
 * + `DashboardSidebarShell` instead.
 */
export function AppSidebar({ currentUser, ...props }: AppSidebarProps) {
  const navUser = currentUser
    ? {
        name: currentUser.displayName || currentUser.email || "Admin",
        email: currentUser.email,
        avatar: "",
      }
    : null;

  return (
    <SidebarShell
      homeHref="/dashboard"
      footer={navUser ? <NavUser user={navUser} /> : <NavUserSkeleton />}
      {...props}
    >
      <SidebarContent>
        <PermissionsProvider currentUser={currentUser ?? undefined}>
          <NavMain items={sidebarItems} />
        </PermissionsProvider>
      </SidebarContent>
    </SidebarShell>
  );
}
