'use client' import { useState } from 'react' import type { TrainingMedia } from '@/lib/sdk/training/types' import { generateVideo, publishMedia } from '@/lib/sdk/training/api' interface VideoPlayerProps { moduleId: string video: TrainingMedia | null onMediaUpdate: () => void } export default function VideoPlayer({ moduleId, video, onMediaUpdate }: VideoPlayerProps) { const [generating, setGenerating] = useState(false) const [error, setError] = useState(null) async function handleGenerate() { setGenerating(true) setError(null) try { await generateVideo(moduleId) onMediaUpdate() } catch (e) { setError(e instanceof Error ? e.message : 'Video-Generierung fehlgeschlagen') } finally { setGenerating(false) } } async function handlePublishToggle() { if (!video) return try { await publishMedia(video.id, !video.is_published) onMediaUpdate() } catch (e) { setError(e instanceof Error ? e.message : 'Fehler beim Aendern des Status') } } function formatDuration(seconds: number): string { const mins = Math.floor(seconds / 60) const secs = Math.floor(seconds % 60) return `${mins}:${secs.toString().padStart(2, '0')}` } function formatSize(bytes: number): string { if (bytes < 1024) return `${bytes} B` if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB` return `${(bytes / (1024 * 1024)).toFixed(1)} MB` } return (

Praesentationsvideo

{!video && ( )}
{error && (
{error}
)} {generating && !video && (
Video wird generiert (Folien + Audio, kann einige Minuten dauern)...
)} {video && video.status === 'processing' && (
Video wird verarbeitet...
)} {video && video.status === 'failed' && (
Generierung fehlgeschlagen: {video.error_message}
)} {video && video.status === 'completed' && (
Dauer: {formatDuration(video.duration_seconds)} Groesse: {formatSize(video.file_size_bytes)}
)}
) }