'use client' import { useState, useEffect, Suspense } from 'react' import { useRedirectIfNotAuth } from '@/utils/auth' import { useSearchParams, useRouter } from 'next/navigation' import Link from 'next/link' import { UserProfile, SessionDetails, Transcript, AiMessage, getSessionDetails, deleteSession, } from '@/utils/api' type ConversationItem = (Transcript & { type: 'transcript' }) | (AiMessage & { type: 'ai_message' }); const Section = ({ title, children }: { title: string, children: React.ReactNode }) => (

{title}

{children}
); function SessionDetailsContent() { const userInfo = useRedirectIfNotAuth() as UserProfile | null; const [sessionDetails, setSessionDetails] = useState(null); const [isLoading, setIsLoading] = useState(true); const searchParams = useSearchParams(); const sessionId = searchParams.get('sessionId'); const router = useRouter(); const [deleting, setDeleting] = useState(false); useEffect(() => { if (userInfo && sessionId) { const fetchDetails = async () => { setIsLoading(true); try { const details = await getSessionDetails(sessionId as string); setSessionDetails(details); } catch (error) { console.error('Failed to load session details:', error); } finally { setIsLoading(false); } }; fetchDetails(); } }, [userInfo, sessionId]); const handleDelete = async () => { if (!sessionId) return; if (!window.confirm('Are you sure you want to delete this activity? This cannot be undone.')) return; setDeleting(true); try { await deleteSession(sessionId); router.push('/activity'); } catch (error) { alert('Failed to delete activity.'); setDeleting(false); console.error(error); } }; if (!userInfo || isLoading) { return (

Loading session details...

); } if (!sessionDetails) { return (

Session Not Found

The requested session could not be found.

← Back to Activity
) } const combinedConversation = [ ...sessionDetails.transcripts.map(t => ({ ...t, type: 'transcript' as const, created_at: t.start_at })), ...sessionDetails.ai_messages.map(m => ({ ...m, type: 'ai_message' as const, created_at: m.sent_at })) ].sort((a, b) => (a.created_at || 0) - (b.created_at || 0)); const audioTranscripts = sessionDetails.transcripts.filter(t => t.speaker !== 'Me'); return (
Back

{sessionDetails.session.title || `Conversation on ${new Date(sessionDetails.session.started_at * 1000).toLocaleDateString()}`}

{new Date(sessionDetails.session.started_at * 1000).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' })} {new Date(sessionDetails.session.started_at * 1000).toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true })}
{sessionDetails.summary && (

"{sessionDetails.summary.tldr}"

)}
{combinedConversation.map((item) => (

{(item.type === 'transcript' && item.speaker === 'Me') || (item.type === 'ai_message' && item.role === 'user') ? 'You: ' : 'AI: '} {item.type === 'transcript' ? item.text : item.content}

))} {combinedConversation.length === 0 &&

No notes recorded for this session.

}
{audioTranscripts.length > 0 ? (
    {audioTranscripts.map(t =>
  • {t.text}
  • )}
) : (

No audio transcript available for this session.

)}
); } export default function SessionDetailsPage() { return (

Loading...

}>
); }