import React, { useState, useEffect } from 'react'; import { View, ActivityIndicator, ScrollView, Alert, Pressable } from 'react-native'; import { Stack, router, useLocalSearchParams } from 'expo-router'; import { useTexts } from '~/hooks/useTexts'; import { Text as TextType } from '~/types/database'; import { AudioPlayer } from '~/components/AudioPlayer'; import { Button } from '~/components/Button'; import { Text } from '~/components/Text'; import { Header } from '~/components/Header'; import { Icon } from '~/components/Icon'; import { useTheme } from '~/hooks/useTheme'; export default function TextDetailScreen() { const { id } = useLocalSearchParams<{ id: string }>(); const { texts, deleteText } = useTexts(); const [text, setText] = useState(null); const [loading, setLoading] = useState(true); const { colors } = useTheme(); useEffect(() => { const foundText = texts.find((t) => t.id === id); setText(foundText || null); setLoading(false); }, [id, texts]); const handleDelete = () => { Alert.alert( 'Text löschen', 'Möchtest du diesen Text wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.', [ { text: 'Abbrechen', style: 'cancel' }, { text: 'Löschen', style: 'destructive', onPress: async () => { if (text) { const { error } = await deleteText(text.id); if (!error) { router.back(); } } }, }, ] ); }; const formatDate = (dateString: string) => { const date = new Date(dateString); return date.toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', }); }; if (loading) { return ( <>
); } if (!text) { return ( <>
Der angeforderte Text wurde nicht gefunden. router.back()} className={`rounded-lg ${colors.primary} px-4 py-2`} > Zurück ); } return ( <>
} /> {text.title} Erstellt: {formatDate(text.created_at)} {text.updated_at !== text.created_at && ( Bearbeitet: {formatDate(text.updated_at)} )} {text.data.tags && text.data.tags.length > 0 ? ( {text.data.tags.map((tag, index) => ( {tag} ))} ) : null} {text.content} { // Refresh text data after audio generation const updatedText = texts.find((t) => t.id === text.id); if (updatedText) { setText(updatedText); } }} /> {text.data.stats ? ( Statistiken Wiedergaben: {text.data.stats?.playCount || 0} {text.data.stats?.totalTime ? ( Gesamtzeit: {Math.floor(text.data.stats.totalTime / 60)}m{' '} {Math.round(text.data.stats.totalTime % 60)}s ) : null} Status: {text.data.stats?.completed ? 'Abgeschlossen' : 'In Progress'} ) : null} {text.data.audio?.hasLocalCache ? ( Audio Cache Chunks: {text.data.audio?.chunks?.length || 0} Größe: {((text.data.audio?.totalSize || 0) / 1024 / 1024).toFixed(2)} MB {text.data.audio?.lastGenerated ? ( Generiert: {formatDate(text.data.audio.lastGenerated)} ) : null} ) : null} ); }