import { Building2, MapPin, Calendar, Globe, ExternalLink, Users, AlertCircle } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; import { Separator } from '@/components/ui/separator'; import { FlexibleDateDisplay } from '@/components/ui/flexible-date-display'; import type { DatePrecision } from '@/components/ui/flexible-date-input'; import type { ParkSubmissionData } from '@/types/submission-data'; import { useEffect, useState } from 'react'; import { supabase } from '@/lib/supabaseClient'; interface RichParkDisplayProps { data: ParkSubmissionData; actionType: 'create' | 'edit' | 'delete'; showAllFields?: boolean; } export function RichParkDisplay({ data, actionType, showAllFields = true }: RichParkDisplayProps) { const [location, setLocation] = useState(null); const [operator, setOperator] = useState(null); const [propertyOwner, setPropertyOwner] = useState(null); useEffect(() => { // Guard against null/undefined data if (!data) return; const fetchRelatedData = async () => { // Fetch location if location_id exists (for edits) if (data.location_id) { const { data: locationData } = await supabase .from('locations') .select('*') .eq('id', data.location_id) .single(); setLocation(locationData); } // Otherwise fetch from park_submission_locations (for new submissions) else if (data.id) { const { data: locationData } = await supabase .from('park_submission_locations') .select('*') .eq('park_submission_id', data.id) .maybeSingle(); setLocation(locationData); } // Fetch operator if (data.operator_id) { const { data: operatorData } = await supabase .from('companies') .select('name') .eq('id', data.operator_id) .single(); setOperator(operatorData?.name || null); } // Fetch property owner if (data.property_owner_id) { const { data: ownerData } = await supabase .from('companies') .select('name') .eq('id', data.property_owner_id) .single(); setPropertyOwner(ownerData?.name || null); } }; fetchRelatedData(); }, [data.location_id, data.id, data.operator_id, data.property_owner_id]); const getStatusColor = (status: string | undefined) => { if (!status) return 'bg-gray-500'; switch (status.toLowerCase()) { case 'operating': return 'bg-green-500'; case 'closed': return 'bg-red-500'; case 'under_construction': return 'bg-blue-500'; case 'planned': return 'bg-purple-500'; default: return 'bg-gray-500'; } }; return (
{/* Header Section */}

{data.name}

{data.park_type?.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase())} {data.status?.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase())} {actionType === 'create' && ( New Park )} {actionType === 'edit' && ( Edit )} {actionType === 'delete' && ( Delete )}
{/* Location Section */} {location && (
Location
{location.street_address &&
Street: {location.street_address}
} {location.city &&
City: {location.city}
} {location.state_province &&
State/Province: {location.state_province}
} {location.country &&
Country: {location.country}
} {location.postal_code &&
Postal Code: {location.postal_code}
} {location.formatted_address && (
{location.formatted_address}
)}
)} {/* Key Information Grid */}
{/* Contact Information */} {(data.phone || data.email) && (
Contact
{data.phone && (
Phone:{' '} {data.phone}
)} {data.email && (
Email:{' '} {data.email}
)}
)} {/* Dates */} {(data.opening_date || data.closing_date) && (
Dates
{data.opening_date && (
Opened:{' '}
)} {data.closing_date && (
Closed:{' '}
)}
)} {/* Companies */} {(operator || propertyOwner) && (
Companies
{operator && (
Operator:{' '} {operator}
)} {propertyOwner && (
Owner:{' '} {propertyOwner}
)}
)}
{/* Description */} {data.description && (
Description
{data.description}
)} {/* Website & Source */} {(data.website_url || data.source_url) && (
{data.website_url && ( Official Website )} {data.source_url && ( Source )}
)} {/* Submission Notes */} {data.submission_notes && (
Submitter Notes
{data.submission_notes}
)} {/* Images Preview */} {(data.banner_image_url || data.card_image_url) && (
Images
{data.banner_image_url && (
Banner
Banner {data.banner_image_id && ( ID: {data.banner_image_id.slice(0, 8)}... )}
)} {data.card_image_url && (
Card
Card {data.card_image_id && ( ID: {data.card_image_id.slice(0, 8)}... )}
)}
)}
); }