import Image from "next/image";
import Link from "next/link";

import {
  SidebarActiveLink,
  SidebarTaxonomiesAccordion,
} from "@/components/admin/layout/SidebarActiveLink";
import { SidebarGroup } from "@/components/admin/layout/SidebarGroup";
import { LiveChatNavBadge } from "@/components/admin/layout/LiveChatNavBadge";
import {
  ADMIN_NAV_GROUPS,
  SIFRARNICI_LINKS,
  TAXONOMY_GROUP_LABEL,
} from "@/components/admin/layout/admin-nav";
import { hasAdminPermission, type AdminPermission } from "@/lib/admin-rbac";
import type { SessionUser } from "@/lib/session";

export function SidebarServer({ user }: { user: SessionUser }) {
  const canTaxonomies = hasAdminPermission(user, "taxonomy:manage");

  const visibleGroups = ADMIN_NAV_GROUPS.map((group) => ({
    ...group,
    links: group.links.filter((link) =>
      hasAdminPermission(user, link.permission as AdminPermission),
    ),
  })).filter((group) => group.links.length > 0);

  return (
    <aside className="admin-sidebar hidden lg:flex">
      <div className="flex h-full min-h-0 flex-col">
        <div className="admin-sidebar-brand">
          <Link href="/admin" className="admin-sidebar-mark" aria-label="BiznisPortal admin">
            <span className="admin-sidebar-mark-glyph">
              <Image src="/icons/app-icon.png" alt="" width={44} height={44} />
            </span>
            <span className="admin-sidebar-mark-text">
              <span className="admin-sidebar-mark-name">BiznisPortal</span>
              <span className="admin-sidebar-mark-sub">Kontrolni centar</span>
            </span>
          </Link>
          <Link
            href="/admin/kompanije/nova"
            className="primary-button mt-4 inline-flex w-full !min-h-[2.85rem] !px-5 !py-2.5 !text-[0.92rem]"
          >
            + Nova kompanija
          </Link>
        </div>

        <div className="admin-sidebar-scroll">
          {visibleGroups.map((group) => (
            <SidebarGroup
              key={group.label}
              label={group.label}
              icon={group.icon}
              hrefs={group.links.map((link) => link.href)}
            >
              {group.links.map((link) => (
                <SidebarActiveLink key={link.href} href={link.href}>
                  <span className="admin-sidebar-link-dot" aria-hidden="true" />
                  <span className="min-w-0 truncate">{link.label}</span>
                  {link.href === "/admin/live-chat" ? <LiveChatNavBadge /> : null}
                </SidebarActiveLink>
              ))}

              {group.label === TAXONOMY_GROUP_LABEL && canTaxonomies ? (
                <SidebarTaxonomiesAccordion items={SIFRARNICI_LINKS} />
              ) : null}
            </SidebarGroup>
          ))}
        </div>
      </div>
    </aside>
  );
}
