import React, { useEffect, useState } from 'react'; import { View, StyleSheet, ActivityIndicator } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useLocalSearchParams, useRouter } from 'expo-router'; import { fetchWithAuth } from '../../src/utils/api'; import Text from '../../components/atoms/Text'; import Button from '../../components/atoms/Button'; import CommonHeader from '../../components/molecules/CommonHeader'; import Avatar from '../../components/atoms/Avatar'; import { Colors } from '../../constants/Colors'; import { usePublicCharacters } from '../../hooks/usePublicCharacters'; export default function ShareCodeScreen() { const { code } = useLocalSearchParams<{ code: string }>(); const router = useRouter(); const [character, setCharacter] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const { cloneCharacter } = usePublicCharacters(); useEffect(() => { loadCharacterByCode(); }, [code]); const loadCharacterByCode = async () => { try { setLoading(true); const response = await fetchWithAuth(`/characters/public/share/${code}`); if (!response.ok) { throw new Error('Charakter nicht gefunden'); } const data = await response.json(); if (data.error) { throw new Error(data.error); } setCharacter(data.character); setError(null); } catch (err) { console.error('Error loading character by share code:', err); setError('Dieser Share-Code ist ungültig oder abgelaufen.'); } finally { setLoading(false); } }; const handleCloneCharacter = async () => { if (!character) return; const result = await cloneCharacter(character.id); if (result) { router.replace(`/character/${result.character.id}`); } }; const handleViewCharacter = () => { if (!character) return; router.push(`/character/${character.id}`); }; if (loading) { return ( Lade Charakter... ); } if (error) { return ( {error}