'use client'; // @ts-nocheck import { useState, useEffect } from 'react'; import { useApiGet } from '@/lib/hooks/useApi'; import { DataTable } from '@/components/data-table'; import { Button } from '@/components/ui/button'; import { AlertCircle, Eye, Clock, Check, X } from 'lucide-react'; import { formatTimeRemaining } from '@/lib/exam-utils'; interface ExamSessionRow { id: string; studentName: string; assessmentTitle: string; status: string; timeRemaining: number; suspiciousEvents: number; riskScore: number; } export default function ExamProctoringPage() { const [sessions, setSessions] = useState([]); const { data: examSessions, isLoading } = useApiGet('/api/v1/exams/active-sessions'); useEffect(() => { if (examSessions) { const processed = examSessions.map((session: any) => ({ id: session.id, studentName: session.student?.firstName + ' ' + session.student?.lastName, assessmentTitle: session.assessment?.title, status: session.status, timeRemaining: Math.max(0, Math.ceil((new Date(session.endTime).getTime() - Date.now()) / 60000)), suspiciousEvents: session.events?.filter((e: any) => e.severity !== 'info').length || 0, riskScore: 0, })); setSessions(processed); } }, [examSessions]); const columns = [ { key: 'studentName', label: 'Student', sortable: true, width: '25%', }, { key: 'assessmentTitle', label: 'Assessment', sortable: true, width: '25%', }, { key: 'status', label: 'Status', render: (value: string) => ( {value} ), width: '15%', }, { key: 'timeRemaining', label: 'Time', render: (value: number) => ( {formatTimeRemaining(value)} ), width: '12%', }, { key: 'suspiciousEvents', label: 'Alerts', render: (value: number) => ( value > 0 ? (
{value}
) : ( ) ), width: '12%', }, { key: 'id', label: 'Actions', render: (id: string) => ( ), width: '11%', }, ]; const activeCount = sessions.filter((s) => s.status === 'in_progress').length; const alertCount = sessions.reduce((sum, s) => sum + s.suspiciousEvents, 0); return (

Prüfungsüberwachung

Monitor active exam sessions and suspicious activity

{/* Statistics */}

Aktive Sitzungen

{activeCount}

Warnungen

{alertCount}

0 ? 'text-red-500' : 'text-green-500'}`} />

Sitzungen gesamt

{sessions.length}

{/* Sessions Table */}
); }