'use client'; import { GeneratedQuestion, QuestionType } from '@/types/quiz'; import { Card, CardContent, CardHeader } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { cn } from '@/lib/utils'; export interface QuestionPreviewProps { question: GeneratedQuestion; questionType?: QuestionType; showActions?: boolean; onEdit?: (question: GeneratedQuestion) => void; onDuplicate?: (question: GeneratedQuestion) => void; onRemove?: (questionId: string) => void; className?: string; } export default function QuestionPreview({ question, questionType, showActions = true, onEdit, onDuplicate, onRemove, className = '', }: QuestionPreviewProps) { const renderQuestionContent = () => { switch (question.type) { case 'multiple-choice': return ( ); case 'cloze': return ( ); case 'grammar': return ( ); case 'reading-comp': return ( ); case 'essay': return ( ); default: return (

{question.stem}

); } }; return (
{questionType?.name || 'Question'} {question.points} points

Created: {new Date(question.createdAt).toLocaleString()}

{showActions && (
{onEdit && ( )} {onDuplicate && ( )} {onRemove && ( )}
)}
{/* Content */} {renderQuestionContent()}
); } // Individual question type preview components function MultipleChoicePreview({ question, options, correctAnswer, explanation }: { question: string; options: { A: string; B: string; C: string; D: string }; correctAnswer: string; explanation?: string; }) { return (

Question:

{question}

Options:

{Object.entries(options).map(([key, value]) => (
{key}. {value} {key === correctAnswer && ( ✓ Correct )}
))}
{explanation && (

Explanation:

{explanation}

)}
); } function ClozePreview({ question, blanks, explanation }: { question: string; blanks: { text: string; answer?: string }[]; explanation?: string; }) { return (

Question:

{question}

{blanks.length > 0 && (

Answers:

{blanks.map((blank: { text: string; answer?: string }, index: number) => (
Blank {index + 1}: {blank.answer}
))}
)} {explanation && (

Explanation:

{explanation}

)}
); } function GrammarPreview({ question, errors, explanation }: { question: string; errors: { text: string; correction?: string }[]; explanation?: string; }) { return (

Sentence to Correct:

{question}

{errors.length > 0 && (

Errors & Corrections:

{errors.map((error: { text: string; correction?: string }, index: number) => (

Error: {error.text}

Correction: {error.correction}

))}
)} {explanation && (

Explanation:

{explanation}

)}
); } function ReadingCompPreview({ passage, question, answer, explanation }: { passage: string; question: string; answer: string; explanation?: string; }) { return (

Reading Passage:

{passage}

Question:

{question}

{answer && (

Answer:

{answer}

)} {explanation && (

Explanation:

{explanation}

)}
); } function EssayPreview({ prompt, guidelines, rubric }: { prompt: string; guidelines: string[]; rubric: { criteria: string; points: number }[]; }) { return (

Essay Prompt:

{prompt}

{guidelines.length > 0 && (

Guidelines:

    {guidelines.map((guideline: string, index: number) => (
  • {guideline}
  • ))}
)} {rubric && rubric.length > 0 && (

Grading Rubric:

{rubric.map((item, index) => (
{item.criteria} {item.points} points
))}
)}
); }