import ExamStatsCard from '@/components/exam/exam-stats-card';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Separator } from '@/components/ui/separator';
import DashboardLayout from '@/layouts/dashboard/layout';
import { Head, Link } from '@inertiajs/react';
import { format, parseISO } from 'date-fns';
import { ArrowLeft, Award, BookOpen, Calendar, DollarSign, Edit, Eye, TrendingUp, Users } from 'lucide-react';
interface Props {
exam: Exam & {
instructor: Instructor;
exam_category: ExamCategory;
questions: ExamQuestion[];
enrollments: ExamEnrollment[];
attempts: ExamAttempt[];
reviews: ExamReview[];
};
stats: {
total_enrollments: number;
active_enrollments: number;
total_attempts: number;
completed_attempts: number;
pass_rate: number;
average_score: number;
total_revenue: number;
};
}
const ShowExam = ({ exam, stats }: Props) => {
const recentEnrollments = exam.enrollments.slice(0, 5);
const recentAttempts = exam.attempts.slice(0, 5);
return (
{exam.exam_category.title}
Status
Pricing
{exam.pricing_type === 'free' ? 'Free' : `$${exam.discount_price || exam.price}`}
Total Questions
{exam.total_questions}
Total Marks
{exam.total_marks}
Duration
{exam.duration_hours > 0 && `${exam.duration_hours}h `} {exam.duration_minutes > 0 && `${exam.duration_minutes}m`}
Pass Mark
{exam.pass_mark}
Max Attempts
{exam.max_attempts === 0 ? 'Unlimited' : exam.max_attempts}
Level
{exam.level || 'Not set'}
{attempt.user?.name}
{format(parseISO(attempt.start_time), 'MMM dd, yyyy HH:mm')}
{attempt.obtained_marks}/{attempt.total_marks}
No attempts yet
)}{enrollment.user?.name}
{format(parseISO(enrollment.entry_date), 'MMM dd, yyyy')}
No enrollments yet
)}{(exam.reviews.reduce((sum, r) => sum + r.rating, 0) / exam.reviews.length).toFixed(1)}
{exam.reviews.length} reviews