import { View, Text, FlatList, TouchableOpacity, ActivityIndicator, RefreshControl } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useQueries } from '@tanstack/react-query'; import { router } from 'expo-router'; import { api } from '../../../services/api'; const STATUS_CONFIG: Record = { PENDING: { color: '#92400E', bg: '#FEF3C7' }, CONFIRMED: { color: '#166534', bg: '#DCFCE7' }, DISPUTED: { color: '#991B1B', bg: '#FEE2E2' }, }; export default function RemittancesScreen() { const [remittancesQ, unremittedQ] = useQueries({ queries: [ { queryKey: ['remittances'], queryFn: () => api.get('/api/v1/remittances?limit=50').then(r => r.data?.data ?? r.data) }, { queryKey: ['unremitted'], queryFn: () => api.get('/api/v1/payments?unremitted=true').then(r => r.data).catch(() => null) }, ], }); const data = remittancesQ.data ?? []; const isLoading = remittancesQ.isLoading; const isRefetching = remittancesQ.isRefetching || unremittedQ.isRefetching; const refetchAll = () => { remittancesQ.refetch(); unremittedQ.refetch(); }; // Compute unremitted total from raw payments or summary const unremittedPayments: any[] = Array.isArray(unremittedQ.data?.data) ? unremittedQ.data.data : Array.isArray(unremittedQ.data) ? unremittedQ.data : []; const unremittedTotal = unremittedQ.data?.totalUnremitted ?? unremittedPayments.reduce((s: number, p: any) => s + Number(p.amount ?? 0), 0); const unremittedCount = unremittedQ.data?.count ?? unremittedPayments.length; return ( {/* Header */} router.back()} style={{ marginBottom: 12 }} activeOpacity={0.7}> ← Back Remittances {data.length} submissions router.push('/(app)/remittances/submit')} activeOpacity={0.7} > + Submit {isLoading ? ( ) : ( item.id} refreshControl={} ListHeaderComponent={ unremittedTotal > 0 ? ( router.push('/(app)/remittances/submit')} style={{ backgroundColor: '#FFF7ED', borderRadius: 16, padding: 18, marginBottom: 16, borderWidth: 1.5, borderColor: '#FED7AA' }} activeOpacity={0.7} > Unremitted Amount ₱{Number(unremittedTotal).toLocaleString()} {unremittedCount > 0 && ( {unremittedCount} payment{unremittedCount !== 1 ? 's' : ''} pending remittance )} Tap to submit → ) : null } contentContainerStyle={{ padding: 16, paddingBottom: 32 }} renderItem={({ item }) => { const st = STATUS_CONFIG[item.status] ?? { color: '#6B7280', bg: '#F1F5F9' }; return ( router.push(`/(app)/remittances/${item.id}`)} activeOpacity={0.7} > ₱{Number(item.totalAmount).toLocaleString()} {item.status} {new Date(item.createdAt).toLocaleDateString('en-PH', { year: 'numeric', month: 'long', day: 'numeric' })} {item.payments?.length > 0 && ( {item.payments.length} payment{item.payments.length !== 1 ? 's' : ''} )} ); }} ListEmptyComponent={ No remittances yet } /> )} ); }