import React, { useState } from "react"; import { View, ScrollView, Pressable, Image, Switch, InteractionManager, } from "react-native"; import { useSirouRouter } from "@sirou/react-native"; import { AppRoutes } from "@/lib/routes"; import { Text } from "@/components/ui/text"; import { ArrowLeft, Settings, ChevronRight, CreditCard, ShieldCheck, FileText, HelpCircle, History, Bell, LogOut, User, Lock, Globe, } from "@/lib/icons"; import { ScreenWrapper } from "@/components/ScreenWrapper"; import { ShadowWrapper } from "@/components/ShadowWrapper"; import { useColorScheme } from "nativewind"; import { saveTheme, AppTheme } from "@/lib/theme"; import { useAuthStore } from "@/lib/auth-store"; import { useLanguageStore, AppLanguage } from "@/lib/language-store"; import { LanguageModal } from "@/components/LanguageModal"; import { ThemeModal } from "@/components/ThemeModal"; // ── Constants ───────────────────────────────────────────────────── const AVATAR_FALLBACK_BASE = "https://ui-avatars.com/api/?background=ea580c&color=fff&name="; // ── Theme bottom sheet ──────────────────────────────────────────── const THEME_OPTIONS = [ { value: "light", label: "Light" }, { value: "dark", label: "Dark" }, { value: "system", label: "System Default" }, ] as const; type ThemeOption = (typeof THEME_OPTIONS)[number]["value"]; const LANGUAGE_OPTIONS = [ { value: "en", label: "English" }, { value: "am", label: "Amharic" }, ] as const; type LanguageOption = (typeof LANGUAGE_OPTIONS)[number]["value"]; // ── Shared menu components ──────────────────────────────────────── function MenuGroup({ label, children, }: { label: string; children: React.ReactNode; }) { return ( {label} {children} ); } function MenuItem({ icon, label, sublabel, onPress, right, destructive = false, isLast = false, }: { icon: React.ReactNode; label: string; sublabel?: string; onPress?: () => void; right?: React.ReactNode; destructive?: boolean; isLast?: boolean; }) { return ( {icon} {label} {sublabel ? ( {sublabel} ) : null} {right !== undefined ? ( right ) : ( )} ); } // ── Screen ──────────────────────────────────────────────────────── export default function ProfileScreen() { const nav = useSirouRouter(); const { user, logout } = useAuthStore(); const { setColorScheme, colorScheme } = useColorScheme(); const { language, setLanguage } = useLanguageStore(); const [notifications, setNotifications] = useState(true); const [themeSheetVisible, setThemeSheetVisible] = useState(false); const [languageSheetVisible, setLanguageSheetVisible] = useState(false); const currentTheme: ThemeOption = (colorScheme as ThemeOption) ?? "system"; const currentLanguage: LanguageOption = (language as LanguageOption) ?? "en"; const handleThemeSelect = (val: AppTheme) => { // NativeWind 4 handles system/light/dark setColorScheme(val); saveTheme(val); // persist across restarts }; return ( {/* Header */} nav.back()} className="h-10 w-10 rounded-[10px] bg-card items-center justify-center border border-border" > Profile {/* Edit Profile shortcut */} nav.go("edit-profile")} className="h-10 w-10 rounded-[10px] bg-card items-center justify-center border border-border" > {/* Avatar */} {user?.firstName} {user?.lastName} {user?.email} {/* } label="Subscription" sublabel="Pro Plan — active" onPress={() => {}} /> */} } label="Transaction History" onPress={() => nav.go("history")} isLast /> {/* Preferences */} {/* } label="Push Notifications" right={ } /> */} } label="Appearance" sublabel={ THEME_OPTIONS.find((o) => o.value === currentTheme)?.label ?? "System Default" } onPress={() => setThemeSheetVisible(true)} /> } label="Language" sublabel={ LANGUAGE_OPTIONS.find((o) => o.value === currentLanguage)?.label ?? "English" } onPress={() => setLanguageSheetVisible(true)} /> } label="Security" sublabel="PIN & Biometrics" onPress={() => {}} isLast /> {/* Support & Legal */} } label="Help & Support" onPress={() => nav.go("help")} /> } label="Privacy Policy" onPress={() => nav.go("privacy")} /> } label="Terms of Use" onPress={() => nav.go("terms")} isLast /> {/* Logout */} } label="Log Out" destructive onPress={async () => { await logout(); nav.go("login"); }} right={null} isLast /> {/* Theme sheet */} handleThemeSelect(theme)} onClose={() => setThemeSheetVisible(false)} /> setLanguage(lang)} onClose={() => setLanguageSheetVisible(false)} /> ); }