"use client";

import Link from "next/link";
import { Bell } from "lucide-react";
import { cn } from "@/lib/utils";
import { useNotificationUnreadCount } from "@/lib/notification-unread-store";

type NotificationNavLinkProps = {
  variant?: "sidebar" | "header";
  isActive?: boolean;
  className?: string;
};

export function NotificationNavLink({
  variant = "sidebar",
  isActive = false,
  className,
}: NotificationNavLinkProps) {
  const unreadCount = useNotificationUnreadCount();

  if (variant === "header") {
    return (
      <Link
        href="/notifications"
        aria-label={
          unreadCount > 0
            ? `Notifications, ${unreadCount} unread`
            : "Notifications"
        }
        className={cn(
          "relative inline-flex size-9 items-center justify-center rounded-lg border border-transparent text-[#101828] transition-colors",
          "hover:bg-[#1d1d39]/5 hover:text-[#1d1d39]",
          isActive && "bg-[#1d1d39] text-white hover:bg-[#1d1d39] hover:text-white",
          className,
        )}
      >
        <Bell className="size-[18px] shrink-0" />
        {unreadCount > 0 ? (
          <span className="absolute -top-0.5 -right-0.5 flex h-[18px] min-w-[18px] items-center justify-center rounded-full bg-accent px-1 text-[9px] font-bold leading-none text-white ring-2 ring-white">
            {unreadCount > 99 ? "99+" : unreadCount}
          </span>
        ) : null}
      </Link>
    );
  }

  return (
    <Link
      href="/notifications"
      className={cn(
        "group/navlink relative flex w-full min-w-0 items-center justify-center gap-2",
        "group-data-[collapsible=icon]:h-8 group-data-[collapsible=icon]:min-h-8 group-data-[collapsible=icon]:w-8 group-data-[collapsible=icon]:min-w-8 group-data-[collapsible=icon]:shrink-0 group-data-[collapsible=icon]:items-center group-data-[collapsible=icon]:justify-center",
        className,
      )}
    >
      <div className="relative flex size-[15px] min-h-[15px] min-w-[15px] shrink-0 items-center justify-center group-data-[collapsible=icon]:size-4 group-data-[collapsible=icon]:min-h-4 group-data-[collapsible=icon]:min-w-4">
        <Bell className="size-[15px] min-h-[15px] min-w-[15px] shrink-0 group-data-[collapsible=icon]:size-4 group-data-[collapsible=icon]:min-h-4 group-data-[collapsible=icon]:min-w-4" />
        {unreadCount > 0 ? (
          <span className="absolute -top-1.5 -right-1.5 hidden h-2 w-2 rounded-full bg-accent ring-1 ring-white group-data-[collapsible=icon]:flex" />
        ) : null}
      </div>
      <span className="flex-1 group-data-[collapsible=icon]:hidden">
        Notifications
      </span>
      {unreadCount > 0 ? (
        <span className="flex h-4 min-w-[16px] items-center justify-center rounded-full bg-accent px-1 text-[9px] font-bold text-white group-data-[collapsible=icon]:hidden">
          {unreadCount > 99 ? "99+" : unreadCount}
        </span>
      ) : null}
    </Link>
  );
}
