import { AlertItem } from "../../Shared/Alert"; export const validateWriteBlanks = ( solutions: { id: string; solution: string[] }[], maxWords: number, setAlerts: React.Dispatch> ): boolean => { let isValid = true; const emptySolutions = solutions.flatMap(s => s.solution.map((sol, index) => ({ blankId: s.id, solutionIndex: index, isEmpty: !sol.trim() })) ).filter(({ isEmpty }) => isEmpty); if (emptySolutions.length > 0) { isValid = false; setAlerts(prev => { const filtered = prev.filter(a => !a.tag?.startsWith('empty-solution')); return [...filtered, ...emptySolutions.map(({ blankId, solutionIndex }) => ({ variant: "error" as const, tag: `empty-solution-${blankId}-${solutionIndex}`, description: `Solution ${solutionIndex + 1} for blank ${blankId} cannot be empty` }))]; }); } else { setAlerts(prev => prev.filter(a => !a.tag?.startsWith('empty-solution'))); } if (maxWords > 0) { const invalidWordCount = solutions.flatMap(s => s.solution.map((sol, index) => ({ blankId: s.id, solutionIndex: index, wordCount: sol.trim().split(/\s+/).length })) ).filter(({ wordCount }) => wordCount > maxWords); if (invalidWordCount.length > 0) { isValid = false; setAlerts(prev => { const filtered = prev.filter(a => !a.tag?.startsWith('word-count')); return [...filtered, ...invalidWordCount.map(({ blankId, solutionIndex, wordCount }) => ({ variant: "error" as const, tag: `word-count-${blankId}-${solutionIndex}`, description: `Solution ${solutionIndex + 1} for blank ${blankId} exceeds maximum of ${maxWords} words (current: ${wordCount} words)` }))]; }); } else { setAlerts(prev => prev.filter(a => !a.tag?.startsWith('word-count'))); } } return isValid; };