import { WeekCalendar } from "@/components/WeekCalendar"; import { MobileCardList } from "@/components/MobileCardList"; import { WeekNav } from "@/components/WeekNav"; import { Legend } from "@/components/Legend"; import { EmptyState } from "@/components/EmptyState"; import { PARKS, groupByRegion } from "@/lib/parks"; import { openDb, getDateRange } from "@/lib/db"; import { getTodayLocal } from "@/lib/env"; interface PageProps { searchParams: Promise<{ week?: string }>; } function getWeekStart(param: string | undefined): string { if (param && /^\d{4}-\d{2}-\d{2}$/.test(param)) { const d = new Date(param + "T00:00:00"); if (!isNaN(d.getTime())) { d.setDate(d.getDate() - d.getDay()); return d.toISOString().slice(0, 10); } } const todayIso = getTodayLocal(); const d = new Date(todayIso + "T00:00:00"); d.setDate(d.getDate() - d.getDay()); return d.toISOString().slice(0, 10); } function getWeekDates(sundayIso: string): string[] { return Array.from({ length: 7 }, (_, i) => { const d = new Date(sundayIso + "T00:00:00"); d.setDate(d.getDate() + i); return d.toISOString().slice(0, 10); }); } function getCurrentWeekStart(): string { const todayIso = getTodayLocal(); const d = new Date(todayIso + "T00:00:00"); d.setDate(d.getDate() - d.getDay()); return d.toISOString().slice(0, 10); } export default async function HomePage({ searchParams }: PageProps) { const params = await searchParams; const weekStart = getWeekStart(params.week); const weekDates = getWeekDates(weekStart); const endDate = weekDates[6]; const today = getTodayLocal(); const isCurrentWeek = weekStart === getCurrentWeekStart(); const db = openDb(); const data = getDateRange(db, weekStart, endDate); db.close(); const scrapedCount = Object.values(data).reduce( (sum, parkData) => sum + Object.keys(parkData).length, 0 ); const visibleParks = PARKS.filter((park) => weekDates.some((date) => data[park.id]?.[date]?.isOpen) ); const grouped = groupByRegion(visibleParks); return (