import { useState } from 'react'; import { View, Text, TextInput, TouchableOpacity, ScrollView, Alert, ActivityIndicator } from 'react-native'; import { useRouter } from 'expo-router'; import { api } from '../../../services/api'; const METHODS = ['Cash', 'GCash', 'Maya', 'Bank Transfer']; export default function RecordPaymentScreen() { const router = useRouter(); const [accountNumber, setAccountNumber] = useState(''); const [client, setClient] = useState(null); const [amount, setAmount] = useState(''); const [method, setMethod] = useState('Cash'); const [reference, setReference] = useState(''); const [loading, setLoading] = useState(false); const [searching, setSearching] = useState(false); const searchClient = async () => { if (!accountNumber.trim()) return; setSearching(true); try { const res = await api.get(`/api/v1/clients?accountNumber=${accountNumber.trim()}`); const clients = res.data?.data ?? res.data?.results ?? []; setClient(clients[0] ?? null); if (!clients[0]) Alert.alert('Not found', 'No client with that account number.'); } catch { Alert.alert('Error', 'Could not search clients.'); } finally { setSearching(false); } }; const submit = async () => { if (!client || !amount) return Alert.alert('Required', 'Select a client and enter amount.'); setLoading(true); try { await api.post('/api/v1/payments', { clientId: client.id, amount: parseFloat(amount), paymentMethod: method.toLowerCase().replace(' ', '_'), referenceNumber: reference || undefined, paymentDate: new Date().toISOString().split('T')[0], }); Alert.alert('Success', 'Payment recorded!', [{ text: 'OK', onPress: () => router.back() }]); } catch (e: any) { Alert.alert('Failed', e?.response?.data?.message ?? 'Could not record payment.'); } finally { setLoading(false); } }; return ( router.back()}> ← Back Record Payment Account Number {searching ? : Find} {client && ( {client.name} {client.accountNumber} · {client.status} )} Amount (₱) Payment Method {METHODS.map(m => ( setMethod(m)} > {m} ))} Reference # (optional) {loading ? : Record Payment} ); }