import React, { useEffect, useState } from 'react'; import { useParams, Link } from 'react-router-dom'; import { Play, Plus, ThumbsUp, Share2 } from 'lucide-react'; import { getMovieMetadata, getGenresItems, getMovieCard } from '../lib/api'; import ContentRow from '../components/ContentRow'; import { useToast } from '@/hooks/use-toast'; const MovieDetailPage = () => { const { title } = useParams<{ title: string }>(); const [movie, setMovie] = useState(null); const [loading, setLoading] = useState(true); const [similarMovies, setSimilarMovies] = useState([]); const { toast } = useToast(); useEffect(() => { const fetchMovieData = async () => { if (!title) return; try { setLoading(true); const data = await getMovieMetadata(title); setMovie(data); const movieData = data.data; console.log(movieData); // Fetch similar movies based on individual genres if (movieData.genres && movieData.genres.length > 0) { const currentMovieName = movieData.name; const moviesByGenre = await Promise.all( movieData.genres.map(async (genre: any) => { // Pass a single genre name for each call const genreResult = await getGenresItems([genre.name], 'movie', 10, 1); if (genreResult.movies && Array.isArray(genreResult.movies)) { return genreResult.movies.map((movieItem: any) => { const { title: similarTitle } = movieItem; // Skip current movie if (similarTitle === currentMovieName) return null; return { type: 'movie', title: similarTitle, }; }); } return []; }) ); // Flatten the array of arrays and remove null results const flattenedMovies = moviesByGenre.flat().filter(Boolean); // Remove duplicates based on the title const uniqueMovies = Array.from( new Map(flattenedMovies.map(movie => [movie.title, movie])).values() ); setSimilarMovies(uniqueMovies); } } catch (error) { console.error(`Error fetching movie details for ${title}:`, error); toast({ title: "Error loading movie details", description: "Please try again later", variant: "destructive" }); } finally { setLoading(false); } }; fetchMovieData(); }, [title, toast]); if (loading) { return (
); } if (!movie) { return (

Movie Not Found

We couldn't find the movie you're looking for.

Back to Movies
); } // Use movieData fields from the new structure const movieData = movie.data; const runtime = movieData.runtime ? `${Math.floor(movieData.runtime / 60)}h ${movieData.runtime % 60}m` : ''; const releaseYear = movieData.year || ''; const movieName = (movieData.translations?.nameTranslations?.find((t: any) => t.language === 'eng')?.name || movieData.name || ''); const overview = movieData.overview || (movieData.translations?.overviewTranslations?.find((t: any) => t.language === 'eng')?.overview || ''); return (
{/* Hero backdrop */}
{movieName} { const target = e.target as HTMLImageElement; target.src = '/placeholder.svg'; }} />
{/* Movie details */}
{/* Poster */}
{movieName} { const target = e.target as HTMLImageElement; target.src = '/placeholder.svg'; }} />
{/* Details */}

{movieName}

{releaseYear && {releaseYear}} {runtime && {runtime}} {movieData.contentRatings && movieData.contentRatings.length > 0 && ( {movieData.contentRatings[0].name}+ )}
{movieData.genres && movieData.genres.map((genre: any) => ( {genre.name} ))}

{overview}

Play
{/* Additional details */}
{movieData.translations?.nameTranslations?.find((t: any) => t.isPrimary) && (

"{movieData.translations.nameTranslations.find((t: any) => t.isPrimary).tagline}"

)}
{movieData.production_companies && movieData.production_companies.length > 0 && (

Production

{movieData.production_companies.map((company: any) => company.name).join(', ')}

)} {movieData.spoken_languages && movieData.spoken_languages.length > 0 && (

Languages

{movieData.spoken_languages.join(', ')}

)}
{/* Similar Movies */} {similarMovies.length > 0 && (
)}
); }; export default MovieDetailPage;