import React, { useState } from 'react'; import { Wand2, FileText, List, BookOpen, MessageSquare, Loader2, Settings, Zap } from 'lucide-react'; import { AIEnhancedWikimedia } from '../utils/ai-enhanced-wikimedia'; import { AIProviderManager } from '../utils/ai-providers'; const ContentTransformer: React.FC = () => { const [inputUrl, setInputUrl] = useState(''); const [transformationType, setTransformationType] = useState<'summary' | 'quiz' | 'outline' | 'flashcards'>('summary'); const [loading, setLoading] = useState(false); const [transformedContent, setTransformedContent] = useState(null); const [selectedAnswers, setSelectedAnswers] = useState>({}); const [useAI, setUseAI] = useState(true); const [aiStatus, setAiStatus] = useState<'checking' | 'available' | 'unavailable'>('checking'); React.useEffect(() => { checkAIAvailability(); }, []); const checkAIAvailability = async () => { try { const config = AIProviderManager.getConfig(); const isAvailable = await AIProviderManager.testConnection(config.selectedProvider); setAiStatus(isAvailable ? 'available' : 'unavailable'); } catch (error) { setAiStatus('unavailable'); } }; const transformationTypes = [ { id: 'summary' as const, name: 'Summary', description: 'Create concise summaries', icon: FileText, color: 'bg-primary-500' }, { id: 'quiz' as const, name: 'Quiz', description: 'Generate practice questions', icon: MessageSquare, color: 'bg-secondary-500' }, { id: 'outline' as const, name: 'Study Outline', description: 'Structured learning outline', icon: List, color: 'bg-accent-500' }, { id: 'flashcards' as const, name: 'Flashcards', description: 'Key concepts for memorization', icon: BookOpen, color: 'bg-success-500' } ]; const extractTitleFromUrl = (url: string): string => { try { const urlObj = new URL(url); const pathParts = urlObj.pathname.split('/'); const title = pathParts[pathParts.length - 1]; return decodeURIComponent(title.replace(/_/g, ' ')); } catch { return ''; } }; const detectProject = (url: string): string => { if (url.includes('wikipedia.org')) return 'wikipedia'; if (url.includes('wikibooks.org')) return 'wikibooks'; if (url.includes('wikiversity.org')) return 'wikiversity'; if (url.includes('wikiquote.org')) return 'wikiquote'; if (url.includes('wiktionary.org')) return 'wiktionary'; if (url.includes('wikisource.org')) return 'wikisource'; return 'wikipedia'; }; const handleTransform = async () => { if (!inputUrl.trim()) return; setLoading(true); setSelectedAnswers({}); try { const title = extractTitleFromUrl(inputUrl); const project = detectProject(inputUrl); const content = await AIEnhancedWikimedia.getPageContent(title, project); let transformed; if (useAI && aiStatus === 'available') { // Use AI-enhanced transformation switch (transformationType) { case 'summary': transformed = await AIEnhancedWikimedia.generateSummaryFromContent(content, title); break; case 'quiz': transformed = await AIEnhancedWikimedia.generateQuizFromContent(content, title); break; case 'outline': transformed = await AIEnhancedWikimedia.generateStudyOutline(content, title); break; case 'flashcards': transformed = await AIEnhancedWikimedia.generateFlashcards(content, title); break; } } else { // Use fallback rule-based transformation switch (transformationType) { case 'summary': transformed = generateSummary(content, title); break; case 'quiz': transformed = generateQuiz(content, title); break; case 'outline': transformed = generateOutline(content, title); break; case 'flashcards': transformed = generateFlashcards(content, title); break; } } setTransformedContent(transformed); } catch (error) { console.error('Content transformation failed:', error); } finally { setLoading(false); } }; // Fallback generation methods (existing code) const generateSummary = (content: string, title: string) => { const sentences = content.split('.').filter(s => s.trim().length > 20); const keySentences = sentences.slice(0, 5); return { type: 'summary', title: `Summary: ${title}`, content: keySentences.join('. ') + '.', keyPoints: sentences.slice(5, 10).map(s => s.trim()).filter(s => s.length > 0) }; }; const generateQuiz = (content: string, title: string) => { const questions = [ { question: `What is the main topic discussed in the article about ${title}?`, options: [ `The fundamental concepts and principles of ${title}`, `The historical development of ${title}`, `The practical applications of ${title}`, `The criticism and controversies surrounding ${title}` ], correct: 0 } ]; return { type: 'quiz', title: `Quiz: ${title}`, questions }; }; const generateOutline = (content: string, title: string) => { return { type: 'outline', title: `Study Outline: ${title}`, sections: [ { title: 'Introduction', points: [ `Overview and definition of ${title}`, 'Historical context and background', 'Key terminology and concepts' ] }, { title: 'Main Concepts', points: [ 'Core principles and theories', 'Important characteristics and features', 'Fundamental mechanisms and processes' ] } ] }; }; const generateFlashcards = (content: string, title: string) => { const cards = [ { front: `What is ${title}?`, back: `${title} is a comprehensive topic that encompasses various concepts, principles, and applications within its field of study.` }, { front: 'Key characteristics', back: `The main features include fundamental principles, practical applications, and significant impact on related areas.` } ]; return { type: 'flashcards', title: `Flashcards: ${title}`, cards }; }; const handleAnswerSelect = (questionIndex: number, answerIndex: number) => { setSelectedAnswers(prev => ({ ...prev, [questionIndex]: answerIndex })); }; const renderTransformedContent = () => { if (!transformedContent) return null; switch (transformedContent.type) { case 'summary': return (

{transformedContent.content}

{transformedContent.keyPoints && (

Key Points:

    {transformedContent.keyPoints.map((point: string, index: number) => (
  • {point}
  • ))}
)}
); case 'quiz': return (
{transformedContent.questions.map((q: any, index: number) => (

{index + 1}. {q.question}

{q.options.map((option: string, optIndex: number) => ( ))}
{selectedAnswers[index] !== undefined && q.explanation && (

Explanation: {q.explanation}

)}
))}
); case 'outline': return (
{transformedContent.sections.map((section: any, index: number) => (

{section.title}

    {section.points.map((point: string, pointIndex: number) => (
  • {point}
  • ))}
))}
); case 'flashcards': return (
{transformedContent.cards.map((card: any, index: number) => (

Question {index + 1}

{card.front}

{card.back}

))}
); default: return null; } }; return (

Content Transformer

Transform Wikimedia content into interactive learning materials

{/* AI Status Banner */}
{aiStatus === 'checking' && } {aiStatus === 'available' && } {aiStatus === 'unavailable' && }
{aiStatus === 'available' && 'AI Enhancement Available'} {aiStatus === 'unavailable' && 'AI Enhancement Unavailable'} {aiStatus === 'checking' && 'Checking AI availability...'}
{aiStatus === 'available' && 'Using open-source AI for intelligent content transformation'} {aiStatus === 'unavailable' && 'Using rule-based transformation (still creates useful content!)'}
{aiStatus === 'available' && ( )}
setInputUrl(e.target.value)} placeholder="https://en.wikipedia.org/wiki/Machine_Learning" className="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary-500 focus:border-transparent" />
{transformationTypes.map((type) => { const Icon = type.icon; return ( ); })}
{transformedContent && (

{transformedContent.title}

{useAI && aiStatus === 'available' && ( AI Enhanced )}
{renderTransformedContent()}
)}
); }; export default ContentTransformer;