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)}
/>
);
}