import React, { useState } from 'react'; import { View, Text, StyleSheet, ScrollView, TouchableOpacity, Alert, Switch, } from 'react-native'; import { router } from 'expo-router'; import { Ionicons } from '@expo/vector-icons'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useAuth } from '@/contexts/AuthContext'; import { AppColors, BorderRadius, FontSizes, Spacing } from '@/constants/theme'; interface MenuItemProps { icon: keyof typeof Ionicons.glyphMap; iconColor?: string; iconBgColor?: string; title: string; subtitle?: string; onPress?: () => void; showChevron?: boolean; rightElement?: React.ReactNode; } function MenuItem({ icon, iconColor = AppColors.primary, iconBgColor = '#DBEAFE', title, subtitle, onPress, showChevron = true, rightElement, }: MenuItemProps) { return ( {title} {subtitle && {subtitle}} {rightElement ? rightElement : showChevron && onPress && ( )} ); } export default function ProfileScreen() { const { user, logout } = useAuth(); // Settings states const [pushNotifications, setPushNotifications] = useState(true); const [emailNotifications, setEmailNotifications] = useState(false); const [darkMode, setDarkMode] = useState(false); const [biometricLogin, setBiometricLogin] = useState(false); const handleLogout = () => { Alert.alert( 'Logout', 'Are you sure you want to logout?', [ { text: 'Cancel', style: 'cancel' }, { text: 'Logout', style: 'destructive', onPress: async () => { await logout(); router.replace('/(auth)/login'); }, }, ], { cancelable: true } ); }; // Navigation handlers - now using actual page navigation const handleEditProfile = () => router.push('/profile/edit'); const handleNotifications = () => router.push('/profile/notifications'); const handlePrivacy = () => router.push('/profile/privacy'); const handleUpgrade = () => router.push('/profile/subscription'); const handlePayment = () => router.push('/profile/subscription'); const handleHelp = () => router.push('/profile/help'); const handleSupport = () => router.push('/profile/support'); const handleTerms = () => router.push('/profile/terms'); const handlePrivacyPolicy = () => router.push('/profile/privacy-policy'); const handleLanguage = () => router.push('/profile/language'); const handleAbout = () => router.push('/profile/about'); const handleDevInfo = () => { Alert.alert( 'Developer Info', `User ID: ${user?.user_id || 'N/A'}\n` + `Username: ${user?.user_name || 'N/A'}\n` + `Role: ${user?.max_role || 'N/A'}\n` + `Privileges: ${user?.privileges || 'N/A'}\n\n` + 'Tap "Copy" to copy debug info.', [ { text: 'Close' }, { text: 'Copy', onPress: () => Alert.alert('Copied', 'Debug info copied to clipboard') }, ] ); }; return ( {/* Header */} Profile {/* User Info */} {user?.user_name?.charAt(0).toUpperCase() || 'U'} {user?.user_name || 'User'} {user?.max_role === 2 ? 'Administrator' : 'Caregiver'} ID: {user?.user_id || 'N/A'} {/* Quick Stats */} {user?.privileges?.split(',').length || 0} Beneficiaries 24/7 Monitoring Free Plan {/* Account Section */} Account {/* App Settings */} App Settings } /> } /> { setDarkMode(value); Alert.alert('Dark Mode', 'Dark mode will be available in a future update!'); setDarkMode(false); }} trackColor={{ false: '#E5E7EB', true: AppColors.primaryLight }} thumbColor={darkMode ? AppColors.primary : '#9CA3AF'} /> } /> { setBiometricLogin(value); if (value) { Alert.alert('Biometric Login', 'Biometric authentication enabled!'); } }} trackColor={{ false: '#E5E7EB', true: AppColors.primaryLight }} thumbColor={biometricLogin ? AppColors.primary : '#9CA3AF'} /> } /> {/* Subscription */} Subscription {/* Support */} Support {/* About */} About {/* Logout Button */} Logout {/* Version */} WellNuo v1.0.0 (Expo SDK 54) ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: AppColors.surface, }, header: { paddingHorizontal: Spacing.lg, paddingVertical: Spacing.md, backgroundColor: AppColors.background, borderBottomWidth: 1, borderBottomColor: AppColors.border, }, headerTitle: { fontSize: FontSizes.xl, fontWeight: '700', color: AppColors.textPrimary, }, userCard: { flexDirection: 'row', alignItems: 'center', backgroundColor: AppColors.background, padding: Spacing.lg, }, avatarContainer: { width: 64, height: 64, borderRadius: BorderRadius.full, backgroundColor: AppColors.primary, justifyContent: 'center', alignItems: 'center', }, avatarText: { fontSize: FontSizes['2xl'], fontWeight: '600', color: AppColors.white, }, userInfo: { flex: 1, marginLeft: Spacing.md, }, userName: { fontSize: FontSizes.lg, fontWeight: '600', color: AppColors.textPrimary, }, userRole: { fontSize: FontSizes.sm, color: AppColors.textSecondary, marginTop: 2, }, userId: { fontSize: FontSizes.xs, color: AppColors.textMuted, marginTop: 2, }, editButton: { width: 40, height: 40, borderRadius: BorderRadius.full, backgroundColor: AppColors.surface, justifyContent: 'center', alignItems: 'center', }, statsContainer: { flexDirection: 'row', backgroundColor: AppColors.background, paddingVertical: Spacing.md, paddingHorizontal: Spacing.lg, borderTopWidth: 1, borderTopColor: AppColors.border, marginBottom: Spacing.md, }, statItem: { flex: 1, alignItems: 'center', }, statValue: { fontSize: FontSizes.xl, fontWeight: '700', color: AppColors.primary, }, statLabel: { fontSize: FontSizes.xs, color: AppColors.textMuted, marginTop: 2, }, statDivider: { width: 1, backgroundColor: AppColors.border, marginVertical: Spacing.xs, }, section: { marginBottom: Spacing.md, }, sectionTitle: { fontSize: FontSizes.sm, fontWeight: '600', color: AppColors.textSecondary, paddingHorizontal: Spacing.lg, paddingVertical: Spacing.sm, textTransform: 'uppercase', }, menuCard: { backgroundColor: AppColors.background, }, menuItem: { flexDirection: 'row', alignItems: 'center', paddingVertical: Spacing.md, paddingHorizontal: Spacing.lg, }, menuIconContainer: { width: 36, height: 36, borderRadius: BorderRadius.md, justifyContent: 'center', alignItems: 'center', }, menuTextContainer: { flex: 1, marginLeft: Spacing.md, }, menuTitle: { fontSize: FontSizes.base, fontWeight: '500', color: AppColors.textPrimary, }, menuSubtitle: { fontSize: FontSizes.xs, color: AppColors.textMuted, marginTop: 2, }, menuDivider: { height: 1, backgroundColor: AppColors.border, marginLeft: Spacing.lg + 36 + Spacing.md, }, logoutButton: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', backgroundColor: AppColors.background, paddingVertical: Spacing.md, marginHorizontal: Spacing.lg, borderRadius: BorderRadius.lg, }, logoutText: { fontSize: FontSizes.base, fontWeight: '600', color: AppColors.error, marginLeft: Spacing.sm, }, version: { textAlign: 'center', fontSize: FontSizes.xs, color: AppColors.textMuted, paddingVertical: Spacing.xl, }, });