'use client'; import { useState } from 'react'; import { debounce } from 'lodash'; interface Movie { id: number; title: string; overview: string; release_date: string; vote_average: number; poster_path: string | null; genre_ids: number[]; } export default function MovieSearch() { const [searchQuery, setSearchQuery] = useState(''); const [searchResults, setSearchResults] = useState([]); const [loading, setLoading] = useState(false); const searchMovies = debounce(async (query: string) => { if (!query.trim()) { setSearchResults([]); return; } try { setLoading(true); const response = await fetch( `/api/movies/search?query=${encodeURIComponent(query)}` ); const data = await response.json(); setSearchResults(data.results || []); } catch (error) { console.error('Error searching movies:', error); } finally { setLoading(false); } }, 500); const handleSearch = (e: React.ChangeEvent) => { const query = e.target.value; setSearchQuery(query); searchMovies(query); }; return (
{loading && (
)}
{searchResults.length > 0 && (
{searchResults.map((movie) => (
{movie.title}

{movie.title}

{new Date(movie.release_date).getFullYear()} • {movie.vote_average.toFixed(1)} ⭐

{movie.overview}

))}
)}
); }