"use client"; import { useState } from "react"; import { SearchBar } from "@/components/SearchBar"; import { MovieHeader } from "@/components/MovieHeader"; import { MovieInsightPanel } from "@/components/MovieInsightPanel"; import type { TmdbMovieDetails, TmdbSearchResult } from "@/lib/tmdb"; export default function HomePage() { const [selectedMovie, setSelectedMovie] = useState( null, ); const [movieDetails, setMovieDetails] = useState( null, ); const [isLoadingMovie, setIsLoadingMovie] = useState(false); const [movieError, setMovieError] = useState(null); const handleSelect = async (movie: TmdbSearchResult) => { setSelectedMovie(movie); setMovieDetails(null); setMovieError(null); setIsLoadingMovie(true); try { const res = await fetch(`/api/movie/${movie.id}`); if (!res.ok) { throw new Error("Failed to load movie details"); } const details: TmdbMovieDetails = await res.json(); setMovieDetails(details); } catch (err) { setMovieError( err instanceof Error ? err.message : "Failed to load movie details", ); } finally { setIsLoadingMovie(false); } }; const clearSelection = () => { setSelectedMovie(null); setMovieDetails(null); setIsLoadingMovie(false); setMovieError(null); }; const hasFullMovie = movieDetails != null; return ( <> {/* Compact navbar: title + slogan on left, search on right */}
{!selectedMovie && (

Search for any film using the bar above. We'll generate ratings explained, skip guides, sensitivity warnings, production facts, and more.

)} {selectedMovie && (
{hasFullMovie ? ( ) : (

{selectedMovie.title} {selectedMovie.release_date ? ( ({selectedMovie.release_date.slice(0, 4)}) ) : null}

{selectedMovie.overview && (

{selectedMovie.overview}

)} {isLoadingMovie && (

Loading extended details...

)} {movieError && (

{movieError}. Card content will still load.

)}
)} g.name) ?? []} />
)}
); }