import { Episode } from '@/types'; import { useState, useMemo, useEffect } from 'react'; import { Search, Play, Clock, Calendar, ChevronDown, Tv } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Input } from '@/components/ui/input'; import { Card, CardContent, CardHeader } from '@/components/ui/card'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; interface SeasonsTabProps { episodes: Episode[]; } export default function SeasonsTab({ episodes }: SeasonsTabProps) { const [expandedSeasons, setExpandedSeasons] = useState>(new Set()); // Group episodes by season const episodesBySeason = useMemo(() => { if (!episodes) return {}; const grouped: Record = {}; episodes.forEach(episode => { if (!grouped[episode.season]) { grouped[episode.season] = []; } grouped[episode.season].push(episode); }); // Sort episodes within each season by episode number Object.keys(grouped).forEach(season => { grouped[Number(season)].sort((a, b) => a.episode_number - b.episode_number); }); return grouped; }, [episodes]); // Expand first season by default on mount useEffect(() => { const seasons = Object.keys(episodesBySeason).map(Number).sort((a, b) => a - b); if (seasons.length > 0) { setExpandedSeasons(new Set([seasons[0]])); } }, [episodesBySeason]); const toggleSeason = (season: number) => { setExpandedSeasons(prev => { const newSet = new Set(prev); if (newSet.has(season)) { newSet.delete(season); } else { newSet.add(season); } return newSet; }); }; return (
{/* Header */}

Episodes

{episodes.length} {Object.keys(episodesBySeason).length} Season{Object.keys(episodesBySeason).length !== 1 ? 's' : ''}
{/* Seasons */}
{Object.keys(episodesBySeason) .map(Number) .sort((a, b) => a - b) .map(season => ( toggleSeason(season)} >

Season {season}

{episodesBySeason[season].length} Episode{episodesBySeason[season].length !== 1 ? 's' : ''}
{episodesBySeason[season].map((episode, index) => (
{/* Thumbnail */}
{episode.thumbnail ? ( {episode.title} ) : (
)}
{/* Info */}

Episode {episode.episode_number}

{episode.title}

{episode.description && (

{episode.description}

)}
{episode.duration > 0 && (
{episode.duration}m
)} {episode.air_date && (
{episode.air_date}
)}
))}
))}
); }