import React, { useState } from 'react'; import { View, Text, StyleSheet, ScrollView, Switch, TouchableOpacity, Alert, } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { SafeAreaView } from 'react-native-safe-area-context'; import { router } from 'expo-router'; import { AppColors, BorderRadius, FontSizes, Spacing } from '@/constants/theme'; interface NotificationSettingProps { icon: keyof typeof Ionicons.glyphMap; iconColor: string; iconBgColor: string; title: string; description: string; value: boolean; onValueChange: (value: boolean) => void; } function NotificationSetting({ icon, iconColor, iconBgColor, title, description, value, onValueChange, }: NotificationSettingProps) { return ( {title} {description} ); } export default function NotificationsScreen() { // Alert types const [emergencyAlerts, setEmergencyAlerts] = useState(true); const [activityAlerts, setActivityAlerts] = useState(true); const [lowBattery, setLowBattery] = useState(true); const [dailySummary, setDailySummary] = useState(false); const [weeklySummary, setWeeklySummary] = useState(true); // Delivery methods const [pushEnabled, setPushEnabled] = useState(true); const [emailEnabled, setEmailEnabled] = useState(false); const [smsEnabled, setSmsEnabled] = useState(false); // Quiet hours const [quietHours, setQuietHours] = useState(false); const [quietStart, setQuietStart] = useState('22:00'); const [quietEnd, setQuietEnd] = useState('07:00'); const handleSave = () => { Alert.alert( 'Settings Saved', 'Your notification preferences have been updated.', [{ text: 'OK', onPress: () => router.back() }] ); }; const handleQuietHoursConfig = () => { Alert.alert( 'Quiet Hours', `Current: ${quietStart} - ${quietEnd}\n\nDuring quiet hours, only emergency alerts will be delivered.`, [ { text: 'Cancel', style: 'cancel' }, { text: 'Set Start Time', onPress: () => Alert.alert('Coming Soon', 'Time picker coming soon!') }, ] ); }; return ( {/* Alert Types */} Alert Types {/* Delivery Methods */} Delivery Methods { if (value) { Alert.alert( 'SMS Notifications', 'SMS notifications require a verified phone number. Would you like to add one?', [ { text: 'Cancel', style: 'cancel' }, { text: 'Add Phone', onPress: () => router.push('/profile/edit') }, ] ); } else { setSmsEnabled(false); } }} /> {/* Quiet Hours */} Quiet Hours {quietHours && ( <> Quiet Period {quietStart} - {quietEnd} )} Emergency alerts will always be delivered, even during quiet hours. {/* Test Notification */} { Alert.alert( 'Test Notification Sent', 'A test push notification has been sent to your device.', [{ text: 'OK' }] ); }} > Send Test Notification {/* Save Button */} Save Preferences ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: AppColors.surface, }, section: { marginTop: Spacing.md, }, sectionTitle: { fontSize: FontSizes.sm, fontWeight: '600', color: AppColors.textSecondary, paddingHorizontal: Spacing.lg, paddingVertical: Spacing.sm, textTransform: 'uppercase', }, card: { backgroundColor: AppColors.background, }, settingRow: { flexDirection: 'row', alignItems: 'center', paddingVertical: Spacing.md, paddingHorizontal: Spacing.lg, }, iconContainer: { width: 40, height: 40, borderRadius: BorderRadius.md, justifyContent: 'center', alignItems: 'center', }, settingContent: { flex: 1, marginLeft: Spacing.md, }, settingTitle: { fontSize: FontSizes.base, fontWeight: '500', color: AppColors.textPrimary, }, settingDescription: { fontSize: FontSizes.xs, color: AppColors.textMuted, marginTop: 2, }, divider: { height: 1, backgroundColor: AppColors.border, marginLeft: Spacing.lg + 40 + Spacing.md, }, timeRow: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', paddingVertical: Spacing.md, paddingHorizontal: Spacing.lg, }, timeInfo: { flexDirection: 'row', alignItems: 'center', }, timeLabel: { fontSize: FontSizes.base, color: AppColors.textPrimary, marginLeft: Spacing.sm, }, timeValue: { flexDirection: 'row', alignItems: 'center', }, timeText: { fontSize: FontSizes.sm, color: AppColors.textSecondary, marginRight: Spacing.xs, }, quietNote: { fontSize: FontSizes.xs, color: AppColors.textMuted, paddingHorizontal: Spacing.lg, paddingTop: Spacing.sm, }, testButton: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', backgroundColor: AppColors.background, paddingVertical: Spacing.md, marginHorizontal: Spacing.lg, borderRadius: BorderRadius.lg, borderWidth: 1, borderColor: AppColors.primary, }, testButtonText: { fontSize: FontSizes.base, fontWeight: '500', color: AppColors.primary, marginLeft: Spacing.sm, }, footer: { padding: Spacing.lg, backgroundColor: AppColors.background, borderTopWidth: 1, borderTopColor: AppColors.border, }, saveButton: { backgroundColor: AppColors.primary, borderRadius: BorderRadius.lg, paddingVertical: Spacing.md, alignItems: 'center', }, saveButtonText: { fontSize: FontSizes.base, fontWeight: '600', color: AppColors.white, }, });