import React, { useState } from 'react'; import { ActionIcon, Box, Group, Progress, Stack, Text, Tooltip, } from '@mantine/core'; import { ChevronDown, ChevronRight, Radio } from 'lucide-react'; const formatProgramTime = (seconds) => { const absSeconds = Math.abs(seconds); const hours = Math.floor(absSeconds / 3600); const minutes = Math.floor((absSeconds % 3600) / 60); const secs = Math.floor(absSeconds % 60); if (hours > 0) { return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; } return `${minutes}:${secs.toString().padStart(2, '0')}`; }; const ProgramPreview = ({ program, loading, fetched, label = 'Now Playing:' }) => { const [isExpanded, setIsExpanded] = useState(false); if (loading) { return ( Loading EPG data... ); } if (fetched && !program) { return ( No current program (EPG may need refresh) ); } if (!program) { return null; } const now = new Date(); const startTime = program.start_time ? new Date(program.start_time) : null; const endTime = program.end_time ? new Date(program.end_time) : null; let elapsed = 0, remaining = 0, percentage = 0; let hasValidTime = false; if (startTime && endTime) { const totalDuration = (endTime - startTime) / 1000; if (totalDuration > 0) { hasValidTime = true; elapsed = (now - startTime) / 1000; remaining = (endTime - now) / 1000; percentage = Math.min(100, Math.max(0, (elapsed / totalDuration) * 100)); } } return ( <> {label} {program.title} setIsExpanded(!isExpanded)} style={{ flexShrink: 0 }} > {isExpanded ? : } {isExpanded && program.description && ( {program.description} )} {isExpanded && hasValidTime && ( {formatProgramTime(elapsed)} elapsed {formatProgramTime(remaining)} remaining )} ); }; export default ProgramPreview;