'use client' import { Check } from 'lucide-react' import { useEffect, useRef, useState } from 'react' import { useLocalStorage } from './use-local-storage' interface ChapterCompletionProps { chapterNumber: number completionMessage?: string } export function ChapterCompletion({ chapterNumber, completionMessage }: ChapterCompletionProps) { const [completedChapters, setCompletedChapters] = useLocalStorage( 'completed-chapters', [] ) const [isCompleted, setIsCompleted] = useState(false) const [isVisible, setIsVisible] = useState(false) const containerRef = useRef(null) const timerRef = useRef(null) // Check if chapter is already completed on mount useEffect(() => { if (completedChapters.includes(chapterNumber)) { setIsCompleted(true) } }, [chapterNumber, completedChapters]) useEffect(() => { const container = containerRef.current if (!container) return const observer = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { setIsVisible(true) } else { setIsVisible(false) // Reset timer if user scrolls away if (timerRef.current) { clearTimeout(timerRef.current) timerRef.current = null } } }) }, { threshold: 0.5, // Trigger when 50% of the component is visible rootMargin: '0px', } ) observer.observe(container) return () => { observer.disconnect() if (timerRef.current) { clearTimeout(timerRef.current) } } }, []) useEffect(() => { if (isVisible && !isCompleted) { // Start timer when component becomes visible timerRef.current = setTimeout(() => { setIsCompleted(true) // Save to local storage if (!completedChapters.includes(chapterNumber)) { setCompletedChapters([...completedChapters, chapterNumber]) } }, 5000) // 5 seconds } else if (!isVisible && timerRef.current) { // Clear timer if user scrolls away before completion clearTimeout(timerRef.current) timerRef.current = null } return () => { if (timerRef.current) { clearTimeout(timerRef.current) } } }, [isVisible, isCompleted, chapterNumber, completedChapters, setCompletedChapters]) return (
{/* Large circle with chapter number */}
{chapterNumber}
{/* Small checkmark circle overlapping bottom-right */}
{/* Completion text */}

You've completed Chapter {chapterNumber}

{completionMessage && (

{completionMessage}

)}
) }