import { getTranslations, getLocale } from "next-intl/server";
import { Link } from "@/i18n/navigation";
import { LocaleSwitch } from "@/components/LocaleSwitch";
import { NotificationBell } from "@/components/NotificationBell";
import { MobileNavMenu } from "@/components/MobileNavMenu";
import { HeaderPositioning } from "@/components/HeaderPositioning";
import { HeaderNavLink } from "@/components/HeaderNavLink";
import { getSessionClientId } from "@/lib/auth";
import { connectDB } from "@/lib/db";
import { Notification } from "@/models/Notification";
export { HEADER_HEIGHT } from "@/lib/layoutMetrics";

async function getNotificationSummary(clientId: string) {
  await connectDB();
  const [unreadCount, notifications] = await Promise.all([
    Notification.countDocuments({ recipientId: clientId, read: false }),
    Notification.find({ recipientId: clientId }).sort({ createdAt: -1 }).limit(8).lean(),
  ]);
  return {
    unreadCount,
    notifications: notifications.map((n) => ({
      id: String(n._id),
      title: n.title,
      body: n.body,
      link: n.link,
      read: n.read,
      createdAt: n.createdAt.toISOString(),
    })),
  };
}

export async function SiteHeader({ isStaff, bannerEnabled }: { isStaff: boolean; bannerEnabled?: boolean }) {
  const common = await getTranslations("common");
  const nav = await getTranslations("nav");
  const notif = await getTranslations("notifications");
  const locale = await getLocale();
  const clientId = await getSessionClientId();
  const summary = clientId ? await getNotificationSummary(clientId) : null;
  const accountHref = clientId ? "/account" : "/login";

  return (
    // bannerEnabled wird unverändert (roh, nur die Business-Einstellung)
    // durchgereicht — HeaderPositioning kombiniert es selbst reaktiv mit
    // isAdminRoute (siehe Kommentar dort), da diese async Server Component
    // bei einer client-seitigen Navigation nicht erneut ausgeführt wird.
    <HeaderPositioning bannerEnabled={bannerEnabled}>
      {/* Kein eigener Hintergrundbalken mehr (Redesign 03.09.2026) — Wordmark
          und Nav rücken stattdessen an die Position der Eckrahmen-Motive
          (.rk-corner) heran, Lesbarkeit kommt nur noch aus dem text-shadow
          oben, genau wie bei den Eckrahmen-Beschriftungen selbst. */}
      <Link
        href="/"
        className="rk-wordmark absolute top-8 left-8 sm:top-10 sm:left-[3.6rem] text-xs tracking-[0.13em] sm:text-sm text-[var(--rk-ink)] hover:opacity-80"
      >
        {common("siteName")}
      </Link>
      <nav className="hidden md:flex absolute top-10 right-[3.4rem] items-center gap-[19px] text-[11px] uppercase tracking-[0.13em] text-[var(--rk-ink-muted)]">
        <HeaderNavLink href="/portfolio">{nav("portfolio")}</HeaderNavLink>
        <HeaderNavLink href="/ueber-mich">{nav("aboutMe")}</HeaderNavLink>
        <HeaderNavLink href="/angebote">{nav("angebote")}</HeaderNavLink>
        <HeaderNavLink href="/gutscheine">{nav("vouchers")}</HeaderNavLink>
        <HeaderNavLink href="/conventions">{nav("conventions")}</HeaderNavLink>
        <HeaderNavLink href="/blog">{nav("blog")}</HeaderNavLink>
        <HeaderNavLink href="/faq">{nav("faq")}</HeaderNavLink>
        <span className="h-4 w-px bg-white/40" aria-hidden="true" />
        <HeaderNavLink href={accountHref}>{clientId ? nav("account") : nav("login")}</HeaderNavLink>
        {isStaff && (
          <HeaderNavLink href="/de/admin" raw>
            Admin
          </HeaderNavLink>
        )}
        {summary && (
          <NotificationBell
            initialUnreadCount={summary.unreadCount}
            initialNotifications={summary.notifications}
            viewAllHref={isStaff ? "/de/admin/notifications" : `/${locale}/account/notifications`}
            locale={locale}
            emptyLabel={notif("empty")}
            viewAllLabel={notif("viewAll")}
          />
        )}
        <span className="h-4 w-px bg-white/40" aria-hidden="true" />
        <LocaleSwitch />
      </nav>

      <div className="flex md:hidden absolute top-8 right-8 items-center gap-4 text-[var(--rk-ink-muted)]">
        {summary && (
          <NotificationBell
            initialUnreadCount={summary.unreadCount}
            initialNotifications={summary.notifications}
            viewAllHref={isStaff ? "/de/admin/notifications" : `/${locale}/account/notifications`}
            locale={locale}
            emptyLabel={notif("empty")}
            viewAllLabel={notif("viewAll")}
          />
        )}
        <MobileNavMenu
          links={[
            { href: "/portfolio", label: nav("portfolio") },
            { href: "/ueber-mich", label: nav("aboutMe") },
            { href: "/angebote", label: nav("angebote") },
            { href: "/gutscheine", label: nav("vouchers") },
            { href: "/conventions", label: nav("conventions") },
            { href: "/blog", label: nav("blog") },
            { href: "/faq", label: nav("faq") },
          ]}
          accountHref={clientId ? "/account" : "/login"}
          accountLabel={clientId ? nav("account") : nav("login")}
          adminHref={isStaff ? "/de/admin" : undefined}
          adminLabel="Admin"
        />
      </div>
    </HeaderPositioning>
  );
}
