import { memo, useState } from 'react' import ChevronDown from 'lucide-react/dist/esm/icons/chevron-down' import ChevronUp from 'lucide-react/dist/esm/icons/chevron-up' import Pencil from 'lucide-react/dist/esm/icons/pencil' import Trash2 from 'lucide-react/dist/esm/icons/trash-2' import ImageSlot from './ImageSlot' import QuestionEditForm from './QuestionEditForm' import { OPTION_LETTERS } from './questionUtils' import { Card } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' const typeColor = { mcq: 'bg-sky-500/10 text-sky-600 dark:text-sky-400 border-sky-500/20', msq: 'bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20', nat: 'bg-green-500/10 text-green-600 dark:text-green-400 border-green-500/20', } const QuestionCard = memo(function QuestionCard({ q, idx, onDelete, onUpdate, onUploadImage, onDeleteImage, }) { const [open, setOpen] = useState(false) const [editing, setEditing] = useState(false) const optionImages = q.option_images || {} const toggleOpen = () => setOpen(current => !current) const handleKeyDown = (event) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault() toggleOpen() } } return (
Q{idx + 1}

{q.question_text}

{q.question_type.toUpperCase()} {q.marks}M {q.subject && · {q.subject}}
{open ? : }
{open && (
{editing ? ( { await onUpdate(q.id, payload) setEditing(false) }} onCancel={() => setEditing(false)} /> ) : ( <> {q.options?.length > 0 && (
{q.options.map((option, optionIdx) => { const letter = OPTION_LETTERS[optionIdx] || String(optionIdx + 1) const isCorrect = q.correct_answer?.includes(letter) return (

{letter}.{option}

onUploadImage(q.id, file, letter)} onDeleteImage={onDeleteImage} deleteTarget={q.id} deleteExtraArg={letter} />
) })}
)}
Answer: {q.correct_answer} · +{q.marks}M {q.negative_marks > 0 && / -{q.negative_marks}M}

Question Image (optional)

onUploadImage(q.id, file, 'question')} onDeleteImage={onDeleteImage} deleteTarget={q.id} deleteExtraArg={'question'} />
)}
)}
) }) export default QuestionCard