import { useEffect, useState } from 'react'; import HeroSection from '../components/HeroSection'; import ContentRow from '../components/ContentRow'; import { getRecentItems, getGenreCategories, getGenresItems, getMovieCard, getTvShowCard } from '../lib/api'; import { useToast } from '@/hooks/use-toast'; // GenreRow component for dynamic loading of a genre row const GenreRow = ({ genre, type }) => { const [loading, setLoading] = useState(true); const [items, setItems] = useState([]); const { toast } = useToast(); useEffect(() => { const fetchGenreData = async () => { try { // Fetch titles for the given genre and type const genreItems = await getGenresItems([genre], type, 10, 1); const titles = type === "movie" ? (genreItems && Array.isArray(genreItems.movies) ? genreItems.movies.map(item => item.title) : []) : (genreItems && Array.isArray(genreItems.series) ? genreItems.series.map(item => item.title) : []); if (titles.length === 0) { setLoading(false); return; } // For each title, fetch the card details const fetchCard = async (title) => { try { if (type === "movie") { const movieInfo = await getMovieCard(title); if (movieInfo) { return { type: 'movie', title, image: movieInfo.image, description: movieInfo.overview, genre: movieInfo.genres?.map((g) => g.name) || [], year: movieInfo.year }; } } else { const showInfo = await getTvShowCard(title); if (showInfo) { return { type: 'tvshow', title, image: showInfo.image, description: showInfo.overview, genre: showInfo.genres?.map((g) => g.name) || [], year: showInfo.year }; } } } catch (error) { console.error(`Error fetching card for ${title}:`, error); return null; } return null; }; const cardPromises = titles.map((title) => fetchCard(title)); const cards = await Promise.all(cardPromises); setItems(cards.filter(item => item !== null)); } catch (error) { console.error(`Error fetching ${type} items for genre ${genre}:`, error); toast({ title: `Error loading ${type} items`, description: `Failed to load ${genre} ${type} items`, variant: "destructive" }); } finally { setLoading(false); } }; fetchGenreData(); }, [genre, type, toast]); // While data is being fetched, show a simple loader in place of the row if (loading) { return (