'use client' import { useState, useEffect } from 'react' import { ProtectedRoute } from '@/components/ProtectedRoute' import { Navigation } from '@/components/Navigation' import { ClickableTextV2 } from '@/components/ClickableTextV2' import { GrammarCorrectionPanel } from '@/components/GrammarCorrectionPanel' function GenerateContent() { const [mode, setMode] = useState<'manual' | 'screenshot'>('manual') const [textInput, setTextInput] = useState('') const [extractionType, setExtractionType] = useState<'vocabulary' | 'smart'>('vocabulary') const [cardCount, setCardCount] = useState(10) const [isGenerating, setIsGenerating] = useState(false) const [isAnalyzing, setIsAnalyzing] = useState(false) const [generatedCards, setGeneratedCards] = useState([]) const [showPreview, setShowPreview] = useState(false) const [showAnalysisView, setShowAnalysisView] = useState(false) const [sentenceAnalysis, setSentenceAnalysis] = useState(null) const [sentenceMeaning, setSentenceMeaning] = useState('') const [grammarCorrection, setGrammarCorrection] = useState(null) const [finalText, setFinalText] = useState('') const [usageCount, setUsageCount] = useState(0) const [isPremium] = useState(true) const [cacheStatus, setCacheStatus] = useState<{ isCached: boolean cacheHit: boolean usingAI: boolean message: string } | null>(null) // 處理句子分析 - 使用真實AI API const handleAnalyzeSentence = async () => { console.log('🚀 handleAnalyzeSentence 被調用') console.log('📝 輸入文本:', textInput) if (!textInput.trim()) { console.log('❌ 文本為空,退出') return } if (!isPremium && usageCount >= 5) { console.log('❌ 使用次數超限') alert('❌ 免費用戶 3 小時內只能分析 5 次句子,請稍後再試或升級到付費版本') return } console.log('✅ 開始分析,設定 loading 狀態') setIsAnalyzing(true) try { // 調用真實的後端AI API console.log('🌐 發送API請求到:', 'http://localhost:5000/api/ai/analyze-sentence') const response = await fetch('http://localhost:5000/api/ai/analyze-sentence', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ inputText: textInput, analysisMode: 'full' }) }) console.log('📡 API響應狀態:', response.status, response.statusText) if (!response.ok) { throw new Error(`API 錯誤: ${response.status}`) } const result = await response.json() console.log('📦 完整API響應:', result) if (result.success) { // 設定快取狀態 setCacheStatus({ isCached: result.cached || false, cacheHit: result.cacheHit || false, usingAI: result.usingAI || false, message: result.message || '分析完成' }) // 使用真實AI的回應資料 - 支援兩種key格式 (小寫/大寫) setSentenceAnalysis(result.data.wordAnalysis || result.data.WordAnalysis || {}) // 安全處理 sentenceMeaning - 支援兩種key格式 (小寫/大寫) const sentenceMeaning = result.data.sentenceMeaning || result.data.SentenceMeaning || {} const translation = sentenceMeaning.Translation || sentenceMeaning.translation || '翻譯處理中...' const explanation = sentenceMeaning.Explanation || sentenceMeaning.explanation || '解釋處理中...' setSentenceMeaning(translation + ' ' + explanation) setGrammarCorrection(result.data.grammarCorrection || result.data.GrammarCorrection || { hasErrors: false }) setFinalText(result.data.finalAnalysisText || result.data.FinalAnalysisText || textInput) setShowAnalysisView(true) setUsageCount(prev => prev + 1) } else { throw new Error(result.error || '分析失敗') } } catch (error) { console.error('Error analyzing sentence:', error) alert(`分析句子時發生錯誤: ${error instanceof Error ? error.message : '未知錯誤'}`) } finally { setIsAnalyzing(false) } } const handleAcceptCorrection = () => { if (grammarCorrection?.correctedText) { setFinalText(grammarCorrection.correctedText) alert('✅ 已採用修正版本,後續學習將基於正確的句子進行!') } } const handleRejectCorrection = () => { setFinalText(grammarCorrection?.originalText || textInput) alert('📝 已保持原始版本,將基於您的原始輸入進行學習。') } const handleGenerate = async () => { if (!textInput.trim()) return setIsGenerating(true) try { const response = await fetch('http://localhost:5000/api/ai/test/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ inputText: textInput, extractionType: extractionType, cardCount: cardCount }) }) if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`) } const result = await response.json() if (result.success) { setGeneratedCards(result.data) setShowPreview(true) setShowAnalysisView(false) } else { throw new Error(result.error || '生成詞卡失敗') } } catch (error) { console.error('Error generating cards:', error) alert(`生成詞卡時發生錯誤: ${error instanceof Error ? error.message : '未知錯誤'}`) } finally { setIsGenerating(false) } } return (
{!showAnalysisView && !showPreview ? (

AI 智能生成詞卡

{/* Input Mode Selection */}

原始例句類型

{/* Content Input */}

輸入英文文本