/* eslint-disable @next/next/no-img-element */ import React from 'react'; import { cn } from "@/lib/utils"; import { Button } from '@/components/ui/button'; import PlaceholderImage from './placeholder-image'; interface Location { lat: number; lng: number; } interface Photo { thumbnail: string; small: string; medium: string; large: string; original: string; caption?: string; } interface Place { name: string; location: Location; place_id: string; vicinity: string; rating?: number; reviews_count?: number; price_level?: string; description?: string; photos?: Photo[]; is_closed?: boolean; next_open_close?: string; type?: string; cuisine?: string; source?: string; phone?: string; website?: string; hours?: string[]; distance?: string; bearing?: string; } interface PlaceCardProps { place: Place; onClick: () => void; isSelected?: boolean; variant?: 'overlay' | 'list'; } const PlaceCard: React.FC = ({ place, onClick, isSelected = false, variant = 'list' }) => { const isOverlay = variant === 'overlay'; // Validation helpers from before... const isValidString = (str: any): boolean => { return str !== undefined && str !== null && String(str).trim() !== '' && String(str).toLowerCase() !== 'undefined' && String(str).toLowerCase() !== 'null'; }; const isValidNumber = (num: any): boolean => { if (num === undefined || num === null) return false; const parsed = Number(num); return !isNaN(parsed) && isFinite(parsed) && parsed !== 0; }; const formatRating = (rating: any): string => { if (!isValidNumber(rating)) return ''; const parsed = Number(rating); return parsed.toFixed(1); }; return (
{/* Image Container */}
{place.photos?.[0]?.medium ? ( {place.name} ) : ( )}
{/* Title Section */}

{place.name}

{isValidNumber(place.rating) && (
{formatRating(place.rating)} {isValidNumber(place.reviews_count) && ( ({place.reviews_count} reviews) )}
)}
{/* Status & Info */}
{place.is_closed !== undefined && ( {place.is_closed ? "Closed" : "Open now"} )} {isValidString(place.next_open_close) && ( <> · until {place.next_open_close} )} {isValidString(place.type) && ( <> · {place.type} )} {isValidString(place.price_level) && ( <> · {place.price_level} )}
{/* Description */} {isValidString(place.description) && (

{place.description}

)} {/* Action Buttons */}
{isValidString(place.website) && ( )} {isValidString(place.phone) && ( )} {isValidString(place.place_id) && ( )}
); }; export default PlaceCard;