"use client" import { useState, useEffect } from "react" import { TestLayout } from "@/components/test-layout" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group" import { Label } from "@/components/ui/label" import { useRouter } from "next/navigation" import { useAuth } from "@/lib/hooks/use-auth" interface LogicQuestion { id: number question: string option_a: string option_b: string option_c: string option_d: string option_e: string correct_answer: 'A' | 'B' | 'C' | 'D' | 'E' explanation?: string created_at: string } export default function LogicTestPage() { const router = useRouter() const { user } = useAuth() const [questions, setQuestions] = useState([]) const [currentQuestion, setCurrentQuestion] = useState(0) const [answers, setAnswers] = useState>({}) const [timeRemaining, setTimeRemaining] = useState(20 * 60) // 20 minutes in seconds const [isLoading, setIsLoading] = useState(true) const [isSubmitting, setIsSubmitting] = useState(false) // Load questions from database useEffect(() => { const loadQuestions = async () => { try { const response = await fetch('/api/logic-questions') const data = await response.json() if (data.success) { setQuestions(data.questions) } else { console.error('Failed to load questions:', data.error) } } catch (error) { console.error('Error loading questions:', error) } finally { setIsLoading(false) } } loadQuestions() }, []) // Timer effect useEffect(() => { if (questions.length === 0) return const timer = setInterval(() => { setTimeRemaining((prev) => { if (prev <= 1) { handleSubmit() return 0 } return prev - 1 }) }, 1000) return () => clearInterval(timer) }, [questions]) const formatTime = (seconds: number) => { const mins = Math.floor(seconds / 60) const secs = seconds % 60 return `${mins.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}` } const handleAnswerChange = (value: string) => { setAnswers((prev) => ({ ...prev, [currentQuestion]: value, })) } const handleNext = () => { if (currentQuestion < questions.length - 1) { setCurrentQuestion((prev) => prev + 1) } } const handlePrevious = () => { if (currentQuestion > 0) { setCurrentQuestion((prev) => prev - 1) } } const handleSubmit = async () => { console.log('🔍 開始提交邏輯測驗...') console.log('用戶狀態:', user) if (!user) { console.log('❌ 用戶未登入') alert('請先登入') return } console.log('✅ 用戶已登入,用戶ID:', user.id) setIsSubmitting(true) try { // Calculate score let correctAnswers = 0 questions.forEach((question, index) => { if (answers[index] === question.correct_answer) { correctAnswers++ } }) const score = Math.round((correctAnswers / questions.length) * 100) const completedAt = new Date().toISOString().replace('Z', '').replace('T', ' ') console.log('📊 測驗結果計算:') console.log('答對題數:', correctAnswers) console.log('總題數:', questions.length) console.log('分數:', score) console.log('完成時間:', completedAt) // Store results in localStorage (for backward compatibility) const results = { type: "logic", score, correctAnswers, totalQuestions: questions.length, answers, completedAt, } localStorage.setItem("logicTestResults", JSON.stringify(results)) console.log('✅ 結果已儲存到 localStorage') // Upload to database console.log('🔄 開始上傳到資料庫...') const uploadData = { userId: user.id, answers: Object.values(answers), completedAt: completedAt } console.log('上傳數據:', uploadData) const uploadResponse = await fetch('/api/test-results/logic', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(uploadData) }) console.log('📡 API 響應狀態:', uploadResponse.status) const uploadResult = await uploadResponse.json() console.log('📡 API 響應內容:', uploadResult) if (uploadResult.success) { console.log('✅ 邏輯測驗結果已上傳到資料庫') console.log('測試結果ID:', uploadResult.data.testResult.id) console.log('答案記錄數量:', uploadResult.data.answerCount) } else { console.error('❌ 上傳到資料庫失敗:', uploadResult.error) // 即使上傳失敗,也繼續顯示結果 } router.push("/results/logic") } catch (error) { console.error('❌ 提交測驗失敗:', error) alert('提交測驗失敗,請重試') } finally { setIsSubmitting(false) } } if (isLoading) { return ( router.push("/")} >

載入題目中...

) } if (questions.length === 0) { return ( router.push("/")} >

無法載入題目,請稍後再試

) } const currentQ = questions[currentQuestion] const isLastQuestion = currentQuestion === questions.length - 1 const hasAnswer = answers[currentQuestion] !== undefined return ( router.push("/")} >
{currentQ.question}

請仔細閱讀題目,選擇最正確的答案,每題均為單選。

{[ { value: 'A', text: currentQ.option_a }, { value: 'B', text: currentQ.option_b }, { value: 'C', text: currentQ.option_c }, { value: 'D', text: currentQ.option_d }, { value: 'E', text: currentQ.option_e } ].map((option, index) => (
))}
{/* Navigation */}
{isLastQuestion ? ( ) : ( )}
{questions.map((_, index) => ( ))}
{/* Progress Summary */}
已完成 {Object.keys(answers).length} / {questions.length} 題
) }