'use client'; import { useState, useEffect, useRef } from 'react'; import Image from 'next/image'; import { moviesAPI } from '@/lib/neoApi'; import { getImageUrl } from '@/lib/neoApi'; import type { MovieDetails } from '@/lib/api'; import MoviePlayer from '@/components/MoviePlayer'; import FavoriteButton from '@/components/FavoriteButton'; import { formatDate } from '@/lib/utils'; import { PlayCircle, ArrowLeft } from 'lucide-react'; interface MovieContentProps { movieId: string; initialMovie: MovieDetails; } export default function MovieContent({ movieId, initialMovie }: MovieContentProps) { const [movie] = useState(initialMovie); const [imdbId, setImdbId] = useState(null); const [isPlayerFullscreen, setIsPlayerFullscreen] = useState(false); const [isControlsVisible, setIsControlsVisible] = useState(false); const controlsTimeoutRef = useRef(null); useEffect(() => { const fetchImdbId = async () => { try { const { data } = await moviesAPI.getMovie(movieId); if (data?.imdb_id) { setImdbId(data.imdb_id); } } catch (err) { console.error('Error fetching IMDb ID:', err); } }; fetchImdbId(); }, [movieId]); const showControls = () => { if (controlsTimeoutRef.current) { clearTimeout(controlsTimeoutRef.current); } setIsControlsVisible(true); controlsTimeoutRef.current = setTimeout(() => { setIsControlsVisible(false); }, 3000); }; const handleOpenPlayer = () => { setIsPlayerFullscreen(true); showControls(); }; const handleClosePlayer = () => { setIsPlayerFullscreen(false); if (controlsTimeoutRef.current) { clearTimeout(controlsTimeoutRef.current); } }; return ( <>
{/* Left Column: Poster */}
{`Постер
{/* Middle Column: Details */}

{movie.title}

{movie.tagline && (

{movie.tagline}

)}
Рейтинг: {movie.vote_average.toFixed(1)} | {movie.runtime} мин. | {formatDate(movie.release_date)}
{movie.genres.map((genre) => ( {genre.name} ))}

{movie.overview}

{/* Mobile-only Watch Button */} {imdbId && ( )}
{/* Desktop-only Embedded Player */} {imdbId && (
)}
{/* Fullscreen Player for Mobile */} {isPlayerFullscreen && imdbId && (
)} ); }