import Link from "next/link"; import type { Park } from "@/lib/scrapers/types"; import type { DayData } from "@/lib/db"; interface ParkCardProps { park: Park; weekDates: string[]; // 7 dates YYYY-MM-DD parkData: Record; today: string; } const DOW_SHORT = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]; function parseDate(iso: string) { const d = new Date(iso + "T00:00:00"); return { day: d.getDate(), dow: d.getDay(), isWeekend: d.getDay() === 0 || d.getDay() === 6 }; } export function ParkCard({ park, weekDates, parkData, today }: ParkCardProps) { return (
{/* Park name + location */}
{park.name}
{park.location.city}, {park.location.state}
{/* 7-day grid */}
{weekDates.map((date) => { const pd = parseDate(date); const isToday = date === today; const dayData = parkData[date]; const isOpen = dayData?.isOpen && dayData?.hoursLabel; const isPH = dayData?.specialType === "passholder_preview"; let cellBg = "transparent"; let cellBorder = "1px solid var(--color-border-subtle)"; const cellBorderRadius = "6px"; if (isToday) { cellBg = "var(--color-today-bg)"; cellBorder = `1px solid var(--color-today-border)`; } else if (pd.isWeekend) { cellBg = "var(--color-weekend-header)"; } return (
{/* Day name */} {DOW_SHORT[pd.dow]} {/* Date number */} {pd.day} {/* Status */} {!dayData ? ( ) : isPH && isOpen ? ( PH ) : isOpen ? ( Open ) : ( · )}
); })}
{/* Hours detail row — show the open day hours inline */} {weekDates.some((d) => parkData[d]?.isOpen && parkData[d]?.hoursLabel) && (
{weekDates.map((date) => { const pd = parseDate(date); const dayData = parkData[date]; if (!dayData?.isOpen || !dayData?.hoursLabel) return null; const isPH = dayData.specialType === "passholder_preview"; return ( {DOW_SHORT[pd.dow]} {dayData.hoursLabel} {isPH && ( PH )} ); })}
)}
); }