import { Alert, Linking, Platform, ScrollView, Switch, Text, TouchableOpacity, View, } from 'react-native'; import { useEffect, useRef, useState } from 'react'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useRouter } from 'expo-router'; import { Ionicons } from '@expo/vector-icons'; import { MenuView, type MenuAction } from '@react-native-menu/menu'; import { TrueSheet } from '@lodev09/react-native-true-sheet'; import { useTranslation } from 'react-i18next'; import Constants from 'expo-constants'; import { LanguageIcon } from '../components/icons/LanguageIcon'; import { useColors } from '../lib/theme'; import { Button } from '../components/Button'; import { useAuthStore } from '../stores/auth'; import { useAppLockStore } from '../stores/appLock'; import { useThemeStore, type ThemeMode } from '../stores/theme'; import { useLanguageStore, type AppLanguage } from '../stores/language'; import { useUserPlan } from '../hooks/useUserPlan'; import { useMe, invalidateMe } from '../hooks/useMe'; import { apiFetch } from '../lib/api'; import { AppHeader } from '../components/AppHeader'; import { useNotificationPrefsStore } from '../stores/notificationPrefs'; // ─── Subscription Sheet ──────────────────────────────────────────────────── type SubscriptionSheetProps = { plan: 'free' | 'pro' | 'legend'; colors: import('../lib/theme').ColorScheme; t: (key: string) => string; }; const PLAN_ACCENT: Record = { free: '#737373', pro: '#007AFF', legend: '#f59e0b', }; function SubscriptionSheet({ plan, colors, t }: SubscriptionSheetProps) { const accentColor = PLAN_ACCENT[plan] ?? '#737373'; const planLabel = plan === 'legend' ? t('settings.subscription_plan_legend') : plan === 'pro' ? t('settings.subscription_plan_pro') : t('settings.subscription_plan_free'); return ( {t('settings.subscription_sheet_title')} {planLabel} {t('settings.subscription_sheet_body')} {/* TODO: für iOS-Submission ggf. zu nicht-tippbarem Text degradieren (Apple Guideline 3.1.1: externe Abo-Links können Review-Ablehnung triggern, wenn sie als Kauf-Umgehung gewertet werden. Standalone-URL ohne Preis-Info sollte ok sein, ist aber ungeprüft — bei Submission erneut prüfen.) */}