import { headers } from "next/headers"; import { auth } from "@/lib/auth/server"; import { db, pantryItems, eq, asc } from "@epicure/db"; import { PrintTrigger } from "@/components/recipe/print-trigger"; import { getMessages, formatMessage } from "@/lib/i18n/server"; export default async function PantryPrintPage() { const session = await auth.api.getSession({ headers: await headers() }); if (!session) return null; const m = getMessages((session.user as { locale?: string }).locale); const items = await db.query.pantryItems.findMany({ where: eq(pantryItems.userId, session.user.id), orderBy: asc(pantryItems.rawName), }); const now = new Date(); return ( <>

{m.pantry.title}

{formatMessage(items.length === 1 ? m.pantry.printItemCountSingular : m.pantry.printItemCountPlural, { count: items.length })}

{items.length === 0 ? (

{m.pantry.noItems}

) : ( {items.map((item) => { const exp = item.expiresAt ? new Date(item.expiresAt) : null; const daysLeft = exp ? Math.ceil((exp.getTime() - now.getTime()) / 86400000) : null; const expiryClass = daysLeft === null ? "" : daysLeft < 0 ? "expiry-expired" : daysLeft <= 3 ? "expiry-soon" : ""; return ( ); })}
{m.pantry.colItem} {m.pantry.colQuantity} {m.pantry.colExpires}
{item.rawName} {[item.quantity, item.unit].filter(Boolean).join(" ") || "—"} {exp ? daysLeft !== null && daysLeft < 0 ? formatMessage(m.pantry.expiredDaysAgo, { days: Math.abs(daysLeft) }) : exp.toLocaleDateString("en", { month: "short", day: "numeric", year: "numeric" }) : "—"}
)} ); }