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} 個項目
)}
🟢完成、🟡跳過、🟠答錯、🔴多次&答錯、⚪待進行
)}
)
}