'use client'; import { useEffect, useState } from 'react'; import type { Park, ParkFilterValues, Company } from '@/types/api'; import { ParkSearch } from '@/components/parks/ParkSearch'; import { ViewToggle } from '@/components/parks/ViewToggle'; import { ParkList } from '@/components/parks/ParkList'; import { ParkFilters } from '@/components/parks/ParkFilters'; export default function ParksPage() { const [parks, setParks] = useState([]); const [companies, setCompanies] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid'); const [searchQuery, setSearchQuery] = useState(''); const [filters, setFilters] = useState({}); // Fetch companies for filter dropdown useEffect(() => { async function fetchCompanies() { try { const response = await fetch('/api/companies'); const data = await response.json(); if (!data.success) { throw new Error(data.error || 'Failed to fetch companies'); } setCompanies(data.data || []); } catch (err) { console.error('Failed to fetch companies:', err); // Don't set error state for companies - just show empty list setCompanies([]); } } fetchCompanies(); }, []); // Fetch parks with filters useEffect(() => { async function fetchParks() { try { setLoading(true); setError(null); const queryParams = new URLSearchParams(); // Only add defined parameters if (searchQuery?.trim()) queryParams.set('search', searchQuery.trim()); if (filters.status) queryParams.set('status', filters.status); if (filters.ownerId) queryParams.set('ownerId', filters.ownerId); if (filters.hasOwner !== undefined) queryParams.set('hasOwner', filters.hasOwner.toString()); if (filters.minRides) queryParams.set('minRides', filters.minRides.toString()); if (filters.minCoasters) queryParams.set('minCoasters', filters.minCoasters.toString()); if (filters.minSize) queryParams.set('minSize', filters.minSize.toString()); if (filters.openingDateStart) queryParams.set('openingDateStart', filters.openingDateStart); if (filters.openingDateEnd) queryParams.set('openingDateEnd', filters.openingDateEnd); const response = await fetch(`/api/parks?${queryParams}`); const data = await response.json(); if (!data.success) { throw new Error(data.error || 'Failed to fetch parks'); } setParks(data.data || []); setError(null); } catch (err) { console.error('Error fetching parks:', err); setError(err instanceof Error ? err.message : 'An error occurred while fetching parks'); setParks([]); } finally { setLoading(false); } } fetchParks(); }, [searchQuery, filters]); const handleSearch = (query: string) => { setSearchQuery(query); }; const handleFiltersChange = (newFilters: ParkFilterValues) => { setFilters(newFilters); }; if (loading) { return (

Loading parks...

); } if (error && !parks.length) { return (
{error}
); } return (

Parks

{error && parks.length > 0 && (

Some data might be incomplete or outdated: {error}

)}
); }