import { count, eq } from "drizzle-orm"; import Image from "next/image"; import { getTranslations } from "next-intl/server"; import Link from "@/components/link"; import { cached } from "@/lib/cache"; import { db, User } from "@/lib/db"; import { resolveHotelName } from "@/lib/hotel-name"; import { siteSettings } from "@/lib/services/site-settings"; export async function SiteHeader() { const t = await getTranslations("header"); const [hotelName, header, logo] = await Promise.all([ resolveHotelName(), siteSettings.get("cms_header", "/assets/images/background.png"), siteSettings.get("cms_logo", ""), ]); let online: number; try { online = await cached("online_count", 10_000, async () => { const [row] = await db .select({ total: count() }) .from(User) .where(eq(User.online, "1")); return row?.total ?? 0; }); } catch { online = 0; } const bannerUrl = header && header !== "/assets/images/background.png" ? header : "/assets/images/background.png"; return (
{/* Background image */}
{/* Gradient overlays */}
{/* Subtle dot pattern */}
{/* Decorative glows */}
{/* Content */}
{logo ? ( {hotelName} ) : (

{hotelName}

Hotel

)} {/* Online badge */}
{t("online", { count: online, hotel: hotelName })}
); }