'use client'
import { Navigation } from '@/components/shared/Navigation'
import { FlipMemory } from '@/components/review/quiz/FlipMemory'
import { VocabChoiceQuiz } from '@/components/review/quiz/VocabChoiceQuiz'
import { QuizProgress } from '@/components/review/ui/QuizProgress'
import { QuizResult } from '@/components/review/quiz/QuizResult'
import { useReviewSession } from '@/hooks/review/useReviewSession'
export default function ReviewPage() {
// 使用重構後的 Hook 管理線性複習狀態
const {
quizItems,
score,
isComplete,
currentQuizItem,
currentCard,
vocabOptions,
totalQuizItems,
completedQuizItems,
handleAnswer,
handleSkip,
handleRestart,
isLoading,
error,
flashcards,
totalFlashcardsCount
} = useReviewSession()
// 除錯日誌 - 檢查狀態
console.log('🔍 Review Page 狀態檢查:', {
isLoading,
error,
flashcardsLength: flashcards.length,
totalFlashcardsCount,
currentQuizItem: currentQuizItem?.id,
currentCard: currentCard?.word,
isComplete
})
// 顯示載入狀態
if (isLoading) {
return (
)
}
// 顯示錯誤狀態
if (error) {
const isAuthError = error.includes('登入已過期') || error.includes('認證')
return (
{isAuthError ? '🔒' : '⚠️'}
{isAuthError ? '需要重新登入' : '載入失敗'}
{error}
{isAuthError ? (
) : (
)}
)
}
// 情境 1: 新用戶 - 一張詞卡都沒有
if (!isLoading && !error && totalFlashcardsCount === 0) {
return (
{/* 歡迎圖標 */}
{/* 歡迎標題 */}
歡迎來到 DramaLing!
{/* 說明文字 */}
開始您的英語學習之旅,建立第一張詞卡來開始學習吧!
{/* 功能介紹卡片 */}
{/* 主要行動按鈕 */}
{/* 次要功能 */}
{/* 學習提示 */}
💡 開始提示: 建議從日常生活中的詞彙開始,
或輸入您感興趣的英文句子讓 AI 協助分析!
)
}
// 情境 2: 有詞卡但都已訓練完成
if (!isLoading && !error && totalFlashcardsCount && totalFlashcardsCount > 0 && flashcards.length === 0) {
return (
{/* 慶祝圖標 */}
{/* 主要標題 */}
太棒了!所有詞卡都已掌握
{/* 次標題 */}
您已完成所有 {totalFlashcardsCount} 張詞卡的學習!
目前沒有需要複習的詞卡,您的學習進度非常優秀!
{/* 統計卡片 */}
{/* 行動按鈕 */}
{/* 提示文字 */}
💡 小提示: 詞卡會根據遺忘曲線算法自動安排複習時間。
繼續保持學習,明天可能會有新的複習內容!
)
}
// 顯示結果頁面
if (isComplete) {
return (
{/* 線性測驗完成統計 */}
測驗統計
{completedQuizItems}
完成測驗項目
{flashcards.length}
練習詞卡數
{score.total > 0 ? Math.round((score.correct / score.total) * 100) : 0}%
正確率
)
}
// 主要線性測驗頁面
// 只有在有可用測驗項目時才顯示測驗界面
if (!isLoading && !error && totalFlashcardsCount !== null && totalFlashcardsCount > 0 && flashcards.length > 0 && currentQuizItem && currentCard) {
return (
{/* 使用簡化的 ReviewProgress 組件 */}
{/* 根據當前測驗項目類型渲染對應組件 */}
{currentQuizItem && currentCard && (
<>
{currentQuizItem.quizType === 'flip-card' && (
)}
{currentQuizItem.quizType === 'vocab-choice' && (
)}
>
)}
)
}
// Fallback 狀態 - 處理其他未預期情況
return (
🤔
正在準備學習內容
系統正在載入您的學習資料,請稍候片刻。
如果問題持續,請嘗試重新載入頁面。
)
}