import Link from "next/link"; import type { Park } from "@/lib/scrapers/types"; import type { DayData } from "@/lib/db"; import { getTimezoneAbbr } from "@/lib/env"; interface ParkCardProps { park: Park; weekDates: string[]; // 7 dates YYYY-MM-DD, Sun–Sat parkData: Record; today: string; openRideCount?: number; coastersOnly?: boolean; isClosing?: boolean; } const DOW = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; export function ParkCard({ park, weekDates, parkData, today, openRideCount, coastersOnly, isClosing }: ParkCardProps) { const openDays = weekDates.filter((d) => parkData[d]?.isOpen && parkData[d]?.hoursLabel); const tzAbbr = getTimezoneAbbr(park.timezone); const isOpenToday = openDays.includes(today); return (
{/* ── Card header ───────────────────────────────────────────────────── */}
{park.name}
{park.location.city}, {park.location.state}
{isOpenToday ? (
{isClosing ? "Closing" : "Open today"}
) : (
Closed today
)} {isOpenToday && openRideCount !== undefined && (
{openRideCount} {coastersOnly ? (openRideCount === 1 ? "coaster" : "coasters") : (openRideCount === 1 ? "ride" : "rides")} operating
)}
{/* ── Open days list ────────────────────────────────────────────────── */} {openDays.length > 0 && (
{openDays.map((date, i) => { const dow = new Date(date + "T00:00:00").getDay(); const isToday = date === today; const dayData = parkData[date]; const isPH = dayData.specialType === "passholder_preview"; const isLast = i === openDays.length - 1; return (
{isToday ? "Today" : DOW[dow]}
{isPH && ( Passholder )} {dayData.hoursLabel}{" "} {tzAbbr}
); })}
)}
); }