import { useState, useEffect, lazy, Suspense } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Header } from '@/components/layout/Header'; import { trackPageView } from '@/lib/viewTracking'; import { getBannerUrls } from '@/lib/cloudflareImageUtils'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent } from '@/components/ui/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Dialog, DialogContent } from '@/components/ui/dialog'; import { AdminFormSkeleton } from '@/components/loading/PageSkeletons'; import { ArrowLeft, MapPin, Star, Globe, Calendar, Edit, Factory, FerrisWheel } from 'lucide-react'; import { Company } from '@/types/database'; import { supabase } from '@/lib/supabaseClient'; import { ManufacturerPhotoGallery } from '@/components/companies/ManufacturerPhotoGallery'; import { handleNonCriticalError } from '@/lib/errorHandler'; // Lazy load admin form const ManufacturerForm = lazy(() => import('@/components/admin/ManufacturerForm').then(m => ({ default: m.ManufacturerForm }))); import { useAuth } from '@/hooks/useAuth'; import { useUserRole } from '@/hooks/useUserRole'; import { toast } from '@/hooks/use-toast'; import { getErrorMessage } from '@/lib/errorHandler'; import { submitCompanyUpdate } from '@/lib/companyHelpers'; import { VersionIndicator } from '@/components/versioning/VersionIndicator'; import { EntityHistoryTabs } from '@/components/history/EntityHistoryTabs'; import { useAuthModal } from '@/hooks/useAuthModal'; import { MetaTags } from '@/components/seo'; export default function ManufacturerDetail() { const { slug } = useParams<{ slug: string }>(); const navigate = useNavigate(); const [manufacturer, setManufacturer] = useState(null); const [loading, setLoading] = useState(true); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [totalRides, setTotalRides] = useState(0); const [totalModels, setTotalModels] = useState(0); const [totalPhotos, setTotalPhotos] = useState(0); const [statsLoading, setStatsLoading] = useState(true); const { user } = useAuth(); const { isModerator } = useUserRole(); const { requireAuth } = useAuthModal(); useEffect(() => { if (slug) { fetchManufacturerData(); } }, [slug]); // Track page view when manufacturer is loaded useEffect(() => { if (manufacturer?.id) { trackPageView('company', manufacturer.id); } }, [manufacturer?.id]); const fetchManufacturerData = async () => { try { const { data, error } = await supabase .from('companies') .select('*') .eq('slug', slug || '') .eq('company_type', 'manufacturer') .maybeSingle(); if (error) throw error; setManufacturer(data); if (data) { fetchStatistics(data.id); } } catch (error) { handleNonCriticalError(error, { action: 'Fetch manufacturer', metadata: { slug } }); } finally { setLoading(false); } }; const fetchStatistics = async (manufacturerId: string) => { try { // Count rides const { count: ridesCount, error: ridesError } = await supabase .from('rides') .select('id', { count: 'exact', head: true }) .eq('manufacturer_id', manufacturerId); if (ridesError) throw ridesError; setTotalRides(ridesCount || 0); // Count models const { count: modelsCount, error: modelsError } = await supabase .from('ride_models') .select('id', { count: 'exact', head: true }) .eq('manufacturer_id', manufacturerId); if (modelsError) throw modelsError; setTotalModels(modelsCount || 0); // Count photos const { count: photosCount, error: photosError } = await supabase .from('photos') .select('id', { count: 'exact', head: true }) .eq('entity_type', 'manufacturer') .eq('entity_id', manufacturerId); if (photosError) throw photosError; setTotalPhotos(photosCount || 0); } catch (error) { handleNonCriticalError(error, { action: 'Fetch manufacturer statistics', metadata: { manufacturerId } }); } finally { setStatsLoading(false); } }; const handleEditSubmit = async (data: any) => { try { await submitCompanyUpdate( manufacturer!.id, data, user!.id ); toast({ title: "Edit Submitted", description: "Your edit has been submitted for review." }); setIsEditModalOpen(false); } catch (error) { const errorMsg = getErrorMessage(error); toast({ title: "Error", description: errorMsg, variant: "destructive" }); } }; if (loading) { return (
); } if (!manufacturer) { return (

Manufacturer Not Found

); } return (
{/* Back Button and Edit Button */}
{/* Hero Section */}
{(manufacturer.banner_image_url || manufacturer.banner_image_id) ? ( {manufacturer.name} ) : manufacturer.logo_url ? (
{manufacturer.name}
) : (
)}
Manufacturer

{manufacturer.name}

{manufacturer.headquarters_location && (
{manufacturer.headquarters_location}
)}
{(manufacturer.average_rating ?? 0) > 0 && (
{(manufacturer.average_rating ?? 0).toFixed(1)}
{manufacturer.review_count} {manufacturer.review_count === 1 ? "review" : "reviews"}
)}
{/* Company Info */}
{manufacturer.founded_year && (
{manufacturer.founded_year}
Founded
)} {manufacturer.website_url && ( Visit Website )}
{/* Tabs */} Overview Rides {!statsLoading && totalRides > 0 && `(${totalRides})`} Models {!statsLoading && totalModels > 0 && `(${totalModels})`} Photos {!statsLoading && totalPhotos > 0 && `(${totalPhotos})`} History {manufacturer.description && (

About

{manufacturer.description}

)}

Rides

View all rides manufactured by {manufacturer.name}

Models

View all ride models by {manufacturer.name}

{/* Edit Modal */} }> setIsEditModalOpen(false)} />
); }