import { useNavigate } from 'react-router-dom'; import { ArrowLeft, ChevronDown, Play, ChevronUp } from 'lucide-react'; import { useWatchMovie } from '../../hooks/useWatchMovie'; import { useState } from 'react'; import MovieRow from '../../components/MovieRow'; export const WatchPage = ({ slug, episode }: { slug: string, episode: string }) => { const navigate = useNavigate(); const { movie, loading, currentEpisode, setCurrentEpisode, videoRef } = useWatchMovie(slug, episode); const [expanded, setExpanded] = useState(false); const [selectedServer, setSelectedServer] = useState(''); if (!movie) return
Loading...
; // Group episodes by server const episodesByServer = movie?.episodes?.reduce((acc, ep) => { const server = ep.server_name || 'Default'; if (!acc[server]) acc[server] = []; acc[server].push(ep); return acc; }, {} as Record) || {}; const serverNames = Object.keys(episodesByServer); // Initialize selected server if (serverNames.length > 0 && !selectedServer) { const defaultServer = serverNames.find(s => s.toLowerCase().includes('vietsub #1')) || serverNames[0]; setSelectedServer(defaultServer); } const currentServerEpisodes = episodesByServer[selectedServer] || []; const visibleEpisodes = expanded ? currentServerEpisodes : currentServerEpisodes.slice(0, 20); return (
{/* Navigation */}
{/* Player Section - Sticky on larger screens for cinema feel */}
{loading && (
)} {(() => { const activeEpisode = currentServerEpisodes?.find(e => e.number === currentEpisode); if (!activeEpisode?.url) { return (

Processing Content

This title is currently being prepared for streaming.

{/* Subtle Background */}
); } return (
{/* Content Section - Scrolls over the bottom of the player if sticky, or just below */} {/* Content Section - Scrolls over the bottom of the player if sticky, or just below */}
{/* Movie Info */}

{movie.title}

HD {movie.year || '2024'} {movie.episodes?.length || 0} Episodes

{movie.description}

{/* Episodes Grid */}

Episodes

{/* Server Selector */} {serverNames.length > 1 && (
{serverNames.map(server => ( ))}
)}
{currentServerEpisodes.length} available
{visibleEpisodes.map((ep) => ( ))}
{currentServerEpisodes.length > 20 && ( )}
{/* Related Categories */}

More Like This

Trending Now

Top Movies

Animation

); };