"use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; import clsx from "clsx"; import { LogIn, UserRound, RotateCw, BookOpen, Sparkles } from "lucide-react"; import { useDashboardStore } from "@/hooks/useDashboardStore"; import { useI18n } from "@/hooks/useI18n"; function parseExpiryInfo(raw?: string | null) { const text = String(raw || "").trim(); if (!text) return null; const dt = new Date(text); if (Number.isNaN(dt.getTime())) return null; const diffMs = dt.getTime() - Date.now(); const daysLeft = Math.ceil(diffMs / 86_400_000); return { date: dt, daysLeft, expired: diffMs <= 0, }; } export function HeaderBar() { const store = useDashboardStore(); const { locale, setLocale, t } = useI18n(); const pathname = usePathname(); const isAuthenticated = store.proAccess.authenticated; const docsHref = "/docs/intro"; const docsActive = pathname?.startsWith("/docs"); const trialPromoLabel = locale === "en-US" ? "New users get 3-day Pro trial" : "新用户可免费体验 3 天 Pro"; const accountHref = isAuthenticated ? "/account" : "/auth/login?next=%2Faccount"; const accountLabel = isAuthenticated ? t("header.account") : t("header.signIn"); const accountAria = isAuthenticated ? t("header.accountAria") : t("header.signInAria"); const effectiveExpiry = store.proAccess.subscriptionActive ? store.proAccess.subscriptionTotalExpiresAt || store.proAccess.subscriptionExpiresAt : store.proAccess.subscriptionExpiresAt; const expiryInfo = parseExpiryInfo(effectiveExpiry); const isTrialPlan = /trial/i.test( String(store.proAccess.subscriptionPlanCode || ""), ); const showRenewReminder = isAuthenticated && !store.proAccess.loading && ((store.proAccess.subscriptionActive && expiryInfo && expiryInfo.daysLeft <= 3) || (!store.proAccess.subscriptionActive && Boolean(expiryInfo))); const renewReminderLabel = !showRenewReminder ? "" : !store.proAccess.subscriptionActive ? isTrialPlan ? locale === "en-US" ? "Trial ended" : "试用已结束" : locale === "en-US" ? "Pro expired" : "Pro 已到期" : isTrialPlan ? locale === "en-US" ? `Trial ${Math.max(expiryInfo?.daysLeft || 0, 0)}d left` : `试用剩余 ${Math.max(expiryInfo?.daysLeft || 0, 0)} 天` : locale === "en-US" ? `Pro ${Math.max(expiryInfo?.daysLeft || 0, 0)}d left` : `Pro 还剩 ${Math.max(expiryInfo?.daysLeft || 0, 0)} 天`; return (

PolyWeather

{t("header.subtitle")}
{t("header.docs")} {trialPromoLabel} {isAuthenticated ? : } {accountLabel} {showRenewReminder ? ( {renewReminderLabel} ) : null}
{t("header.live")}
); }