import React, { useState, useEffect, useCallback, useMemo } from 'react'; import { View, Text, StyleSheet, ScrollView, TouchableOpacity, RefreshControl, Image, Modal, TextInput, Alert, KeyboardAvoidingView, Platform, Animated, ActivityIndicator, } from 'react-native'; import { useLocalSearchParams, router } from 'expo-router'; import { Ionicons } from '@expo/vector-icons'; import { SafeAreaView } from 'react-native-safe-area-context'; import * as ImagePicker from 'expo-image-picker'; import { api } from '@/services/api'; import { useBeneficiary } from '@/contexts/BeneficiaryContext'; import { LoadingSpinner } from '@/components/ui/LoadingSpinner'; import { FullScreenError } from '@/components/ui/ErrorMessage'; import { Button } from '@/components/ui/Button'; import { SubscriptionPayment } from '@/components/SubscriptionPayment'; import { useToast } from '@/components/ui/Toast'; import MockDashboard from '@/components/MockDashboard'; import { AppColors, BorderRadius, FontSizes, Spacing, FontWeights, Shadows, AvatarSizes, } from '@/constants/theme'; import type { Beneficiary } from '@/types'; // Local beneficiaries have timestamp-based IDs (>1000000000) const isLocalBeneficiary = (id: string | number): boolean => { const numId = typeof id === 'string' ? parseInt(id, 10) : id; return numId > 1000000000; }; // Setup state types type SetupState = 'loading' | 'awaiting_equipment' | 'no_devices' | 'no_subscription' | 'ready'; // No Devices Screen Component function NoDevicesScreen({ beneficiary, onActivate, onGetSensors }: { beneficiary: Beneficiary; onActivate: () => void; onGetSensors: () => void; }) { return ( Connect Sensors To start monitoring {beneficiary.name}'s wellness, you need to connect sensors first. I have sensors Enter activation code to connect your WellNuo sensors Get sensors Order WellNuo sensor kit for comprehensive monitoring ); } // Equipment status configuration const equipmentStatusInfo = { ordered: { icon: 'cube-outline' as const, title: 'Kit Ordered', subtitle: 'Your WellNuo kit is being prepared for shipping', color: AppColors.info, bgColor: AppColors.infoLight, steps: [ { label: 'Order placed', done: true }, { label: 'Preparing', done: true }, { label: 'Shipped', done: false }, { label: 'Delivered', done: false }, ], }, shipped: { icon: 'car-outline' as const, title: 'In Transit', subtitle: 'Your WellNuo kit is on its way', color: AppColors.warning, bgColor: AppColors.warningLight, steps: [ { label: 'Order placed', done: true }, { label: 'Preparing', done: true }, { label: 'Shipped', done: true }, { label: 'Delivered', done: false }, ], }, delivered: { icon: 'checkmark-circle-outline' as const, title: 'Delivered', subtitle: 'Your kit has arrived! Time to set it up.', color: AppColors.success, bgColor: AppColors.successLight, steps: [ { label: 'Order placed', done: true }, { label: 'Preparing', done: true }, { label: 'Shipped', done: true }, { label: 'Delivered', done: true }, ], }, }; // Awaiting Equipment Screen Component function AwaitingEquipmentScreen({ beneficiary, onActivate, onMarkReceived, }: { beneficiary: Beneficiary; onActivate: () => void; onMarkReceived: () => void; }) { const status = beneficiary.equipmentStatus as 'ordered' | 'shipped' | 'delivered'; const info = equipmentStatusInfo[status] || equipmentStatusInfo.ordered; const isDelivered = status === 'delivered'; return ( {info.title} {info.subtitle} {/* Progress steps */} {info.steps.map((step, index) => ( {step.done && ( )} {step.label} {index < info.steps.length - 1 && ( )} ))} {/* Tracking number if available */} {beneficiary.trackingNumber && ( Tracking Number {beneficiary.trackingNumber} )} {/* Actions */} {isDelivered ? (