File size: 3,197 Bytes
9a9d18a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

import React from 'react';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Film, ListVideo } from 'lucide-react';
import PlaybackControls from './PlaybackControls';
import { ScrollArea } from '@/components/ui/scroll-area';
import { cn } from '@/lib/utils';

interface Episode {
    id: string;
    name: string;
    duration: number;
}

interface EpisodePlayerProps {
    episodes: Episode[];
    selectedEpisode: string | null;
    onSelectEpisode: (id: string | null) => void;
}

const EpisodePlayer: React.FC<EpisodePlayerProps> = ({ episodes, selectedEpisode, onSelectEpisode }) => {
    const currentEpisode = episodes.find(e => e.id === selectedEpisode);

    return (
        <Card className="bg-gray-900 border-gray-700 flex-1 flex flex-col">
            <CardHeader>
                <CardTitle className="flex items-center gap-3 text-white">
                    <ListVideo className="w-5 h-5 text-purple-400" />
                    Episodes
                </CardTitle>
            </CardHeader>
            <CardContent className="flex-1 flex flex-col gap-4">
                <ScrollArea className="h-48 pr-4 border border-gray-700 rounded-lg">
                    <div className="p-2 space-y-1">
                        {episodes.length > 0 ? (
                            episodes.map(episode => (
                                <button
                                    key={episode.id}
                                    onClick={() => onSelectEpisode(episode.id)}
                                    className={cn(
                                        "w-full text-left p-2 rounded-md transition-colors text-sm",
                                        selectedEpisode === episode.id
                                            ? "bg-purple-500/20 text-purple-300"
                                            : "hover:bg-gray-800 text-gray-300"
                                    )}
                                >
                                    {episode.name} ({episode.duration}s)
                                </button>
                            ))
                        ) : (
                            <div className="text-center text-gray-500 py-16">
                                Select a dataset to see episodes.
                            </div>
                        )}
                    </div>
                </ScrollArea>

                {currentEpisode ? (
                    <div className="border-t border-gray-700 pt-4 flex flex-col gap-4">
                       <div className="flex items-center gap-3">
                         <Film className="w-5 h-5 text-gray-400" />
                         <h3 className="font-semibold">{currentEpisode.name}</h3>
                       </div>
                        <PlaybackControls duration={currentEpisode.duration} />
                    </div>
                ) : (
                    <div className="text-center text-gray-500 pt-16 border-t border-gray-700">
                        Select an episode to play.
                    </div>
                )}
            </CardContent>
        </Card>
    );
};

export default EpisodePlayer;