'use client'; import { ArrowLeft, BarChart3 } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { useEffect } from 'react'; import { ComparisonStatsBanner } from '@/components/comparison/comparison-stats'; import { ComparisonTable } from '@/components/comparison/comparison-table'; import { Button } from '@/components/ui/button'; import { Link } from '@/i18n/navigation'; import { fetchListingsForComparison } from '@/lib/comparison-api'; import { useComparisonStore, computeComparisonStats, MIN_COMPARE } from '@/lib/comparison-store'; export default function ComparePage() { const t = useTranslations('compare'); const selectedIds = useComparisonStore((s) => s.selectedIds); const listings = useComparisonStore((s) => s.listings); const isLoading = useComparisonStore((s) => s.isLoading); const error = useComparisonStore((s) => s.error); const setListings = useComparisonStore((s) => s.setListings); const setLoading = useComparisonStore((s) => s.setLoading); const setError = useComparisonStore((s) => s.setError); const removeFromCompare = useComparisonStore((s) => s.removeFromCompare); const clearAll = useComparisonStore((s) => s.clearAll); useEffect(() => { if (selectedIds.length < MIN_COMPARE) return; let cancelled = false; async function load() { setLoading(true); try { const data = await fetchListingsForComparison(selectedIds); if (!cancelled) { setListings(data); } } catch { if (!cancelled) { setError(t('loadError')); } } } void load(); return () => { cancelled = true; }; }, [selectedIds.join(',')]); const stats = computeComparisonStats(listings); // Empty state — not enough listings selected if (selectedIds.length < MIN_COMPARE) { return (

{t('title')}

{t('emptyState')}

); } // Loading state if (isLoading) { return (
); } // Error state if (error) { return (

{error}

); } return (
{/* Header */}

{t('title')}

{t('subtitle', { count: listings.length })}

{/* Stats summary */} {stats && (
)} {/* Comparison table */}
); }