import { QuizItem } from '@/lib/data/reviewSimpleData'
interface SimpleProgressProps {
currentQuizItem?: QuizItem
totalQuizItems: number
completedQuizItems: number
score: { correct: number; total: number }
quizItems?: QuizItem[] // 用於顯示測驗項目統計
}
export function QuizProgress({ currentQuizItem, totalQuizItems, completedQuizItems, score, quizItems }: SimpleProgressProps) {
const progress = (completedQuizItems / totalQuizItems) * 100
const accuracy = score.total > 0 ? Math.round((score.correct / score.total) * 100) : 0
// 測驗項目延遲統計計算
const delayStats = quizItems ? {
totalSkips: quizItems.reduce((sum, item) => sum + item.skipCount, 0),
totalWrongs: quizItems.reduce((sum, item) => sum + item.wrongCount, 0),
delayedItems: quizItems.filter(item => item.skipCount + item.wrongCount > 0).length
} : null
return (
線性複習進度
{currentQuizItem && (
{currentQuizItem.quizType === 'flip-card' ? '🔄' : '🎯'}
{currentQuizItem.quizType === 'flip-card' ? '翻卡記憶' : '詞彙選擇'} • {currentQuizItem.cardData.word}
)}
{completedQuizItems}/{totalQuizItems} 項目
{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}
>
)}
{/* 測驗項目順序可視化 */}
{quizItems && currentQuizItem && (
測驗項目序列 (線性流程):
{quizItems.slice(0, 12).map((item) => {
const isCompleted = item.isCompleted
const isCurrent = item.id === currentQuizItem?.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.quizType === 'flip-card' ? '🔄' : '🎯'}
{item.cardData.word}
{statusText && (
({statusText})
)}
)
})}
{quizItems.length > 12 && (
...還有 {quizItems.length - 12} 個項目
)}
🟢完成、🟡跳過、🟠答錯、🔴多次&答錯、⚪待進行
)}
)
}