'use client'
import { useEffect } from 'react'
import { useRouter } from 'next/navigation'
import { Navigation } from '@/components/shared/Navigation'
import LearningComplete from '@/components/flashcards/LearningComplete'
import { Modal } from '@/components/ui/Modal'
// 新架構組件
import { ProgressTracker } from '@/components/review/ui/ProgressTracker'
import { TaskListModal } from '@/components/review/modals/TaskListModal'
import { LoadingStates } from '@/components/review/ui/LoadingStates'
import { ReviewRunner } from '@/components/review/core/ReviewRunner'
// 狀態管理
import { useReviewSessionStore } from '@/store/review/useReviewSessionStore'
import { useTestQueueStore } from '@/store/review/useTestQueueStore'
import { useTestResultStore } from '@/store/review/useTestResultStore'
import { useReviewDataStore } from '@/store/review/useReviewDataStore'
import { useReviewUIStore } from '@/store/review/useReviewUIStore'
import { ReviewService } from '@/lib/services/review/reviewService'
export default function LearnPage() {
const router = useRouter()
// Zustand stores
const { mounted, currentCard, error, setMounted, resetSession: resetSessionState } = useReviewSessionStore()
const {
testItems,
completedTests,
totalTests,
initializeTestQueue,
resetQueue
} = useTestQueueStore()
const { score, resetScore } = useTestResultStore()
const {
dueCards,
showComplete,
showNoDueCards,
isLoadingCards,
loadDueCards,
resetData,
setShowComplete
} = useReviewDataStore()
const {
showTaskListModal,
showReportModal,
modalImage,
reportReason,
reportingCard,
setShowTaskListModal,
closeReportModal,
closeImageModal,
setReportReason
} = useReviewUIStore()
// 初始化
useEffect(() => {
setMounted(true)
initializeSession()
}, [])
// 初始化學習會話
const initializeSession = async () => {
try {
await loadDueCards()
} catch (error) {
console.error('初始化複習會話失敗:', error)
}
}
// 監聽dueCards變化,初始化測試隊列
useEffect(() => {
if (dueCards.length > 0) {
const initQueue = async () => {
try {
const cardIds = dueCards.map(c => c.id)
const completedTests = await ReviewService.loadCompletedTests(cardIds)
initializeTestQueue(dueCards, completedTests)
} catch (error) {
console.error('初始化測試隊列失敗:', error)
}
}
initQueue()
}
}, [dueCards, initializeTestQueue])
// 監聽測試隊列變化,設置當前卡片
useEffect(() => {
if (testItems.length > 0 && dueCards.length > 0) {
const currentTestItem = testItems.find(item => item.isCurrent)
if (currentTestItem) {
const card = dueCards.find(c => c.id === currentTestItem.cardId)
if (card) {
const { setCurrentCard } = useReviewSessionStore.getState()
setCurrentCard(card)
}
}
}
}, [testItems, dueCards])
// 監聽測試完成狀態
useEffect(() => {
if (totalTests > 0 && completedTests >= totalTests) {
setShowComplete(true)
}
}, [completedTests, totalTests, setShowComplete])
// 重新開始
const handleRestart = async () => {
resetSessionState()
resetQueue()
resetScore()
resetData()
await initializeSession()
}
// 載入狀態
if (!mounted || isLoadingCards) {
return (
單字:{reportingCard?.word}