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 Upload from 'lucide-react/dist/esm/icons/upload'
import QuestionEditForm from './QuestionEditForm'
import { OPTION_LETTERS } from './questionUtils'
const typeColor = { mcq: 'badge-blue', msq: 'badge-amber', nat: 'badge-green' }
const openImage = (url) => {
window.open(url, '_blank')
}
const imageKeyHandler = (url) => (event) => {
if (event.key === 'Enter' || event.key === ' ') {
event.preventDefault()
openImage(url)
}
}
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}
{optionImages[letter] ? (

openImage(optionImages[letter])}
/>
) : (
)}
)
})}
)}
Answer:
{q.correct_answer}
·
+{q.marks}M
{q.negative_marks > 0 && / -{q.negative_marks}M}
Question Image (optional)
{q.question_image_url ? (

openImage(q.question_image_url)}
/>
) : (
)}
>
)}
)}
)
})
export default QuestionCard