import { AlertItem } from "../../Shared/Alert";


export const validateWriteBlanks = (
    solutions: { id: string; solution: string[] }[],
    maxWords: number,
    setAlerts: React.Dispatch<React.SetStateAction<AlertItem[]>>
): 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;
};
