import { TestItem } from '@/lib/data/reviewSimpleData' interface SimpleProgressProps { currentTestItem?: TestItem totalTestItems: number completedTestItems: number score: { correct: number; total: number } testItems?: TestItem[] // 用於顯示測驗項目統計 } export function QuizProgress({ currentTestItem, totalTestItems, completedTestItems, score, testItems }: SimpleProgressProps) { const progress = (completedTestItems / totalTestItems) * 100 const accuracy = score.total > 0 ? Math.round((score.correct / score.total) * 100) : 0 // 測驗項目延遲統計計算 const delayStats = testItems ? { totalSkips: testItems.reduce((sum, item) => sum + item.skipCount, 0), totalWrongs: testItems.reduce((sum, item) => sum + item.wrongCount, 0), delayedItems: testItems.filter(item => item.skipCount + item.wrongCount > 0).length } : null return (
線性複習進度 {currentTestItem && (
{currentTestItem.testType === 'flip-card' ? '🔄' : '🎯'} {currentTestItem.testType === 'flip-card' ? '翻卡記憶' : '詞彙選擇'} • {currentTestItem.cardData.word}
)}
{completedTestItems}/{totalTestItems} 項目 {score.total > 0 && ( 準確率 {accuracy}% )}
{/* 進度條 */}
{/* 詳細統計 */}
{score.total > 0 && ( <>
答對 {score.correct}
答錯 {score.total - score.correct}
)} {/* 延遲統計 */} {delayStats && (delayStats.totalSkips > 0 || delayStats.totalWrongs > 0) && ( <> {score.total > 0 && |}
跳過次數 {delayStats.totalSkips}
跳過卡片 {delayStats.delayedItems}
)}
{/* 測驗項目順序可視化 */} {testItems && currentTestItem && (

測驗項目序列 (線性流程):

{testItems.slice(0, 12).map((item) => { const isCompleted = item.isCompleted const isCurrent = item.id === currentTestItem?.id const delayScore = item.skipCount + item.wrongCount // 狀態顏色 let itemStyle = '' let statusText = '' if (isCompleted) { itemStyle = 'bg-green-100 text-green-700 border-green-300' statusText = '✓' } else if (delayScore > 0) { if (item.skipCount > 0 && item.wrongCount > 0) { itemStyle = 'bg-red-100 text-red-700 border-red-300' statusText = `${item.skipCount}+${item.wrongCount}` } else if (item.skipCount > 0) { itemStyle = 'bg-yellow-100 text-yellow-700 border-yellow-300' statusText = `跳${item.skipCount}` } else { itemStyle = 'bg-orange-100 text-orange-700 border-orange-300' statusText = `錯${item.wrongCount}` } } else { itemStyle = 'bg-gray-100 text-gray-600 border-gray-300' statusText = '' } return (
{item.testType === 'flip-card' ? '🔄' : '🎯'} {item.cardData.word} {statusText && ( ({statusText}) )}
) })} {testItems.length > 12 && (
...還有 {testItems.length - 12} 個項目
)}

🟢完成、🟡跳過、🟠答錯、🔴多次&答錯、⚪待進行

)}
) }