import React, { useState, useEffect } from 'react'; import { View, Text, StyleSheet, ScrollView, TouchableOpacity, ActivityIndicator, } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useAuth } from '../contexts/AuthContext'; import { useTheme } from '../contexts/ThemeContext'; import i18n, { saveLanguage } from '../config/i18n'; import AsyncStorage from '@react-native-async-storage/async-storage'; const LANGUAGES = [ { code: 'en', name: 'English', nativeName: 'English', flag: '🇺🇸' }, { code: 'ku-sorani', name: 'Kurdish Sorani', nativeName: 'کوردی سۆرانی', flag: '🟥' }, { code: 'ku-kurmanji', name: 'Kurdish Kurmanji', nativeName: 'Kurdî Kurmancî', flag: '🟨' }, { code: 'ar', name: 'Arabic', nativeName: 'العربية', flag: '🇸🇦' }, { code: 'tr', name: 'Turkish', nativeName: 'Türkçe', flag: '🇹🇷' }, { code: 'fa', name: 'Persian', nativeName: 'فارسی', flag: '🇮🇷' }, ]; export default function LanguageSettingsScreen({ navigation }: any) { const insets = useSafeAreaInsets(); const { user } = useAuth(); const { colors } = useTheme(); const [selectedLanguage, setSelectedLanguage] = useState('en'); const [loading, setLoading] = useState(false); useEffect(() => { loadCurrentLanguage(); }, []); const loadCurrentLanguage = async () => { try { const savedLang = await AsyncStorage.getItem('appLanguage'); if (savedLang) { setSelectedLanguage(savedLang); } } catch (error) { console.error('Error loading language:', error); } }; const handleLanguageChange = async (languageCode: string) => { setLoading(true); try { // Save to AsyncStorage and i18n (silent update) await saveLanguage(languageCode); setSelectedLanguage(languageCode); // Save to backend (fire and forget - non-blocking) if (user?.user_id) { const backendUrl = process.env.EXPO_PUBLIC_BACKEND_URL || 'http://localhost:8001'; fetch(`${backendUrl}/api/auth/profile`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ user_id: user.user_id, language: languageCode, }), }).catch(err => console.error('Error saving language to backend:', err)); } // Silent update - no alert, no navigation reset // Language will be applied on next screen render } catch (error) { console.error('Error changing language:', error); // Even on error, we don't alert or redirect } finally { setLoading(false); } }; return ( navigation.goBack()} style={styles.backButton}> Language 6 languages fully supported. Other languages use Google Translator. {LANGUAGES.map((language) => ( handleLanguageChange(language.code)} disabled={loading} > {language.flag} {language.name} {language.nativeName} {selectedLanguage === language.code && ( )} {loading && selectedLanguage === language.code && ( )} ))} ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#F8F9FA', }, header: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', paddingHorizontal: 16, paddingVertical: 16, backgroundColor: '#FFF', borderBottomWidth: 1, borderBottomColor: '#E5E7EB', }, backButton: { width: 40, height: 40, borderRadius: 20, backgroundColor: '#F3F4F6', alignItems: 'center', justifyContent: 'center', }, headerTitle: { fontSize: 18, fontWeight: '700', color: '#1F2937', }, scrollContent: { padding: 16, paddingBottom: 80, }, infoBox: { flexDirection: 'row', alignItems: 'center', backgroundColor: '#DBEAFE', padding: 12, borderRadius: 8, marginBottom: 16, }, infoText: { fontSize: 14, color: '#1E40AF', marginLeft: 8, flex: 1, }, languageCard: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', backgroundColor: '#FFF', padding: 16, borderRadius: 12, marginBottom: 12, borderWidth: 2, borderColor: '#E5E7EB', shadowColor: '#000', shadowOffset: { width: 0, height: 1 }, shadowOpacity: 0.05, shadowRadius: 4, elevation: 2, }, languageCardSelected: { borderColor: '#EE2A35', backgroundColor: '#FEE2E2', }, languageCardLeft: { flexDirection: 'row', alignItems: 'center', flex: 1, }, flag: { fontSize: 32, marginRight: 12, }, languageInfo: { flex: 1, }, languageName: { fontSize: 16, fontWeight: '600', color: '#1F2937', marginBottom: 2, }, languageNative: { fontSize: 14, color: '#6B7280', }, });