"use client"; import { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Badge } from '@/components/ui/badge'; import { Progress } from '@/components/ui/progress'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Search, Filter, MoreHorizontal, Play, Download, Trash2, RefreshCw, Clock, CheckCircle, XCircle, Eye, } from 'lucide-react'; const mockTasks = [ { id: 1, title: 'Tech Product Demo', status: 'completed', progress: 100, duration: '2:45', createdAt: '2024-01-15T10:30:00Z', completedAt: '2024-01-15T11:15:00Z', chapters: 4, actors: ['Sarah Chen', 'Dr. Marcus Webb'], thumbnail: 'https://images.pexels.com/photos/3861969/pexels-photo-3861969.jpeg?auto=compress&cs=tinysrgb&w=300', }, { id: 2, title: 'Marketing Campaign Video', status: 'processing', progress: 65, duration: '1:30', createdAt: '2024-01-14T15:20:00Z', completedAt: null, chapters: 3, actors: ['Alex Rivera'], thumbnail: 'https://images.pexels.com/photos/3184287/pexels-photo-3184287.jpeg?auto=compress&cs=tinysrgb&w=300', }, { id: 3, title: 'Educational Content Series', status: 'completed', progress: 100, duration: '5:20', createdAt: '2024-01-12T09:00:00Z', completedAt: '2024-01-12T10:30:00Z', chapters: 6, actors: ['Dr. Marcus Webb', 'Sarah Chen'], thumbnail: 'https://images.pexels.com/photos/3184465/pexels-photo-3184465.jpeg?auto=compress&cs=tinysrgb&w=300', }, { id: 4, title: 'Company Introduction', status: 'failed', progress: 0, duration: '0:00', createdAt: '2024-01-10T14:45:00Z', completedAt: null, chapters: 2, actors: ['Sarah Chen'], thumbnail: null, }, { id: 5, title: 'Quarterly Report Presentation', status: 'processing', progress: 25, duration: '3:15', createdAt: '2024-01-09T11:00:00Z', completedAt: null, chapters: 5, actors: ['Dr. Marcus Webb', 'Alex Rivera'], thumbnail: 'https://images.pexels.com/photos/3184291/pexels-photo-3184291.jpeg?auto=compress&cs=tinysrgb&w=300', }, ]; const statusConfig = { completed: { icon: CheckCircle, color: 'text-green-600', bgColor: 'bg-green-100 dark:bg-green-900/20', label: 'Completed', }, processing: { icon: RefreshCw, color: 'text-blue-600', bgColor: 'bg-blue-100 dark:bg-blue-900/20', label: 'Processing', }, failed: { icon: XCircle, color: 'text-red-600', bgColor: 'bg-red-100 dark:bg-red-900/20', label: 'Failed', }, }; export function HistoryPage() { const [searchQuery, setSearchQuery] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); const filteredTasks = mockTasks.filter(task => { const matchesSearch = task.title.toLowerCase().includes(searchQuery.toLowerCase()) || task.actors.some(actor => actor.toLowerCase().includes(searchQuery.toLowerCase())); const matchesStatus = statusFilter === 'all' || task.status === statusFilter; return matchesSearch && matchesStatus; }); const formatDate = (dateString: string) => { return new Date(dateString).toLocaleString(); }; const getTimeSince = (dateString: string) => { const now = new Date(); const date = new Date(dateString); const diffInHours = Math.floor((now.getTime() - date.getTime()) / (1000 * 60 * 60)); if (diffInHours < 1) return 'Less than an hour ago'; if (diffInHours < 24) return `${diffInHours} hours ago`; const diffInDays = Math.floor(diffInHours / 24); return `${diffInDays} days ago`; }; return (
{/* Header */}

Task History

Track the progress and manage your video generation tasks

{/* Filters */}
setSearchQuery(e.target.value)} className="pl-10 w-64" />
setStatusFilter('all')}> All Status setStatusFilter('completed')}> Completed setStatusFilter('processing')}> Processing setStatusFilter('failed')}> Failed
{filteredTasks.length} tasks
{/* Tasks List */}
{filteredTasks.map((task) => { const StatusIcon = statusConfig[task.status as keyof typeof statusConfig].icon; const statusProps = statusConfig[task.status as keyof typeof statusConfig]; return (
{/* Thumbnail */}
{task.thumbnail ? ( {task.title} ) : (
🎬
)} {task.status === 'processing' && (
)}
{/* Task Info */}

{task.title}

{task.status === 'completed' && ( <> Preview Download )} {task.status === 'failed' && ( Retry )} View Details Delete
{statusProps.label}
{task.duration}
{task.chapters} chapters {task.actors.join(', ')}
{task.status === 'processing' && (
Processing... {task.progress}%
)}
Started {getTimeSince(task.createdAt)} {task.completedAt && ( Completed {formatDate(task.completedAt)} )}
); })}
{filteredTasks.length === 0 && (

No tasks found

{searchQuery || statusFilter !== 'all' ? 'No tasks match your current filters. Try adjusting your search.' : 'You haven\'t created any videos yet. Start by creating your first AI video!' }

)}
); }