import React, { useState, useEffect, useCallback } from 'react'; import { View, Text, StyleSheet, ScrollView, TouchableOpacity, RefreshControl, } from 'react-native'; import { useLocalSearchParams, router } from 'expo-router'; import { Ionicons } from '@expo/vector-icons'; import { SafeAreaView } from 'react-native-safe-area-context'; 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 { AppColors, BorderRadius, FontSizes, Spacing } from '@/constants/theme'; import type { Beneficiary } from '@/types'; export default function BeneficiaryDetailScreen() { const { id } = useLocalSearchParams<{ id: string }>(); const { setCurrentBeneficiary } = useBeneficiary(); const [beneficiary, setBeneficiary] = useState(null); const [isLoading, setIsLoading] = useState(true); const [isRefreshing, setIsRefreshing] = useState(false); const [error, setError] = useState(null); const loadBeneficiary = useCallback(async (showLoading = true) => { if (!id) return; if (showLoading) setIsLoading(true); setError(null); try { const response = await api.getBeneficiary(parseInt(id, 10)); if (response.ok && response.data) { setBeneficiary(response.data); } else { setError(response.error?.message || 'Failed to load beneficiary'); } } catch (err) { setError(err instanceof Error ? err.message : 'An error occurred'); } finally { setIsLoading(false); setIsRefreshing(false); } }, [id]); useEffect(() => { loadBeneficiary(); }, [loadBeneficiary]); const handleRefresh = useCallback(() => { setIsRefreshing(true); loadBeneficiary(false); }, [loadBeneficiary]); const handleChatPress = () => { // Set current beneficiary in context before navigating to chat // This allows the chat to include beneficiary context in AI questions if (beneficiary) { setCurrentBeneficiary(beneficiary); } router.push('/(tabs)/chat'); }; if (isLoading) { return ; } if (error || !beneficiary) { return ( loadBeneficiary()} /> ); } return ( {/* Header */} router.back()} > {beneficiary.name} } > {/* Beneficiary Info Card */} {beneficiary.name.charAt(0).toUpperCase()} {beneficiary.status === 'online' ? 'Online' : 'Offline'} {beneficiary.name} {beneficiary.relationship} Last activity: {beneficiary.last_activity} {/* Sensor Stats */} Sensor Overview {beneficiary.sensor_data?.motion_detected ? 'Active' : 'Inactive'} Motion {beneficiary.sensor_data?.last_motion || '--'} {beneficiary.sensor_data?.door_status === 'open' ? 'Open' : 'Closed'} Door Status Main entrance {beneficiary.sensor_data?.temperature || '--'}°C Temperature {beneficiary.sensor_data?.humidity || '--'}% humidity {/* Quick Actions */} Quick Actions Chat with Julia Set Reminder Video Call Activity Report {/* Chat with Julia Button */}