'use client'; import { useEffect, useState } from 'react'; import { useRouter, useParams } from 'next/navigation'; import Header from '../../components/Header'; import Sidebar from '../../components/Sidebar'; import AudioPlayer from '../../components/AudioPlayer'; import TranscriptViewer from '../../components/TranscriptViewer'; import SummaryDisplay from '../../components/SummaryDisplay'; import type { User, Recording } from '@/types'; export default function RecordingDetailPage() { const [user, setUser] = useState(null); const [recording, setRecording] = useState(null); const [isPlaying, setIsPlaying] = useState(false); const [currentTime, setCurrentTime] = useState(0); const [isTranscribing, setIsTranscribing] = useState(false); const router = useRouter(); const params = useParams(); const id = params?.id as string; useEffect(() => { // Fetch current user fetch('/api/auth/me') .then(res => { if (!res.ok) { router.push('/login'); return null; } return res.json(); }) .then(data => { if (data) setUser(data); }) .catch(() => router.push('/login')); // Fetch recording if (id) { fetch(`/api/recordings/${id}`) .then(res => { if (!res.ok) throw new Error('Recording not found'); return res.json(); }) .then(data => { setRecording(data); setIsTranscribing(data.isTranscribing); }) .catch(() => router.push('/recordings')); } }, [id, router]); const handleTranscribe = async () => { if (!id) return; try { const response = await fetch(`/api/recordings/${id}/transcribe`, { method: 'POST', }); if (response.ok) { setIsTranscribing(true); } } catch (error) { console.error('Failed to start transcription:', error); } }; const handleSummarize = async () => { if (!id) return; try { const response = await fetch(`/api/recordings/${id}/summarize`, { method: 'POST', }); if (response.ok) { const data = await response.json(); setRecording(prev => prev ? { ...prev, summary: data.summary } : null); } } catch (error) { console.error('Failed to generate summary:', error); } }; if (!recording) { return (
); } return (

{recording.title}

{recording.createdAt && new Date(recording.createdAt).toLocaleString()}

setIsPlaying(playing)} onSeek={(time) => setCurrentTime(time)} />
{recording.transcript && ( )} {recording.summary && ( )}
); }