import React, { useState } from 'react'; import { View, Image, Pressable, TextInput, ActivityIndicator } from 'react-native'; import { Text } from '../ui/Text'; import * as ImagePicker from 'expo-image-picker'; import { Icon } from '../ui/Icon'; import { Card } from '../ui/Card'; import { Button } from '../ui/Button'; import { useAIStore } from '../../store/aiStore'; import { GeneratedCard } from '../../utils/supabaseAIService'; interface ImageCardCreatorProps { onCardsGenerated?: (cards: GeneratedCard[]) => void; } export const ImageCardCreator: React.FC = ({ onCardsGenerated }) => { const { generateCardsFromImage, isGenerating } = useAIStore(); const [imageUri, setImageUri] = useState(null); const [context, setContext] = useState(''); const [error, setError] = useState(null); const pickImage = async (source: 'camera' | 'library') => { try { let result; if (source === 'camera') { const { status } = await ImagePicker.requestCameraPermissionsAsync(); if (status !== 'granted') { setError('Kamerazugriff verweigert'); return; } result = await ImagePicker.launchCameraAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images, allowsEditing: true, quality: 0.8, base64: false, }); } else { const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync(); if (status !== 'granted') { setError('Galerie-Zugriff verweigert'); return; } result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images, allowsEditing: true, quality: 0.8, base64: false, }); } if (!result.canceled && result.assets[0]) { setImageUri(result.assets[0].uri); setError(null); } } catch (error) { console.error('Error picking image:', error); setError('Fehler beim Auswählen des Bildes'); } }; const handleGenerateCards = async () => { if (!imageUri) return; try { setError(null); const cards = await generateCardsFromImage(imageUri, context); if (onCardsGenerated) { onCardsGenerated(cards); } // Reset after successful generation setImageUri(null); setContext(''); } catch (error: any) { setError(error.message || 'Fehler beim Generieren der Karten'); } }; const removeImage = () => { setImageUri(null); setContext(''); setError(null); }; return ( {!imageUri ? ( <> Bild auswählen pickImage('camera')} className="flex-1 items-center rounded-lg border-2 border-dashed border-gray-300 bg-gray-50 p-6" style={({ pressed }) => pressed && { opacity: 0.7 }}> Foto aufnehmen pickImage('library')} className="flex-1 items-center rounded-lg border-2 border-dashed border-gray-300 bg-gray-50 p-6" style={({ pressed }) => pressed && { opacity: 0.7 }}> Aus Galerie Fotografiere Lehrbücher, Notizen, Whiteboards oder Diagramme ) : ( <> {/* Image Preview */} pressed && { opacity: 0.7 }}> {/* Context Input */} Kontext (optional) {/* Generate Button */} )} {/* Error Display */} {error && ( {error} )} {/* Info Box */} {imageUri && !isGenerating && ( Die KI erkennt Text, Diagramme und Konzepte im Bild und erstellt daraus passende Lernkarten. )} ); };