import React, { useState } from "react"; import { View, TextInput, ActivityIndicator, KeyboardAvoidingView, Platform, Pressable, useColorScheme, } from "react-native"; import { useSirouRouter } from "@sirou/react-native"; import { AppRoutes } from "@/lib/routes"; import { Text } from "@/components/ui/text"; import { Button } from "@/components/ui/button"; import { ScreenWrapper } from "@/components/ScreenWrapper"; import { StandardHeader } from "@/components/StandardHeader"; import { useAuthStore } from "@/lib/auth-store"; import { api } from "@/lib/api"; import { toast } from "@/lib/toast-store"; import { getPlaceholderColor } from "@/lib/colors"; import { Search, ChevronDown } from "@/lib/icons"; import { PickerModal, SelectOption } from "@/components/PickerModal"; const providers = [ { label: "Telebirr", value: "telebirr", needsAccount: false }, { label: "Dashen", value: "dashen", needsAccount: false }, { label: "CBE", value: "cbe", needsAccount: true }, { label: "Abyssinia", value: "abyssinia", needsAccount: true }, { label: "Other", value: "other", needsAccount: false }, ]; function getSuffix(provider: string, accountNumber: string): string { const clean = accountNumber.replace(/\s+/g, ""); switch (provider) { case "cbe": return clean.slice(-8); case "abyssinia": return clean.slice(-5); default: return ""; } } export default function VerifyPaymentScreen() { const nav = useSirouRouter(); const user = useAuthStore((s) => s.user); const colorScheme = useColorScheme(); const isDark = colorScheme === "dark"; const [reference, setReference] = useState(""); const [accountNumber, setAccountNumber] = useState(""); const [provider, setProvider] = useState("telebirr"); const [loading, setLoading] = useState(false); const [showProvider, setShowProvider] = useState(false); const selectedProvider = providers.find((p) => p.value === provider); const needsAccount = selectedProvider?.needsAccount ?? false; const handleVerify = async () => { const trimmed = reference.trim(); if (!trimmed) { toast.error("Required", "Please enter the transaction reference number"); return; } if (needsAccount && !accountNumber.trim()) { toast.error("Required", "Please enter the account number"); return; } setLoading(true); try { const response = await api.scan.verifyPaymentReference({ body: { reference: trimmed, phoneNumber: user?.phone || "", suffix: getSuffix(provider, accountNumber), }, }); if (!response.success) { toast.error( "Verification Failed", response.message || "Could not verify payment", ); return; } const refVerification = response.verifierApi?.referenceVerification; if (!refVerification) { toast.error( "No Data", response.message || "No verification data returned", ); return; } if (refVerification.ok && refVerification.data?.data) { nav.go("verify-payment-result", { data: JSON.stringify(refVerification.data.data), }); setReference(""); setAccountNumber(""); } else { const msg = refVerification.skippedReason || refVerification.data?.error || "No data available"; toast.warning("Verification Skipped", msg); } } catch (err: any) { toast.error( "Verification Failed", err.message || "Could not verify payment reference", ); } finally { setLoading(false); } }; return ( Verify Payment Reference Enter the transaction / FT number to verify the payment Provider setShowProvider(true)} className="flex-row items-center rounded-[6px] px-4 border border-border h-10 bg-card" > {provider} Transaction Reference {needsAccount && ( Account Number )} {/* {needsAccount && accountNumber.length > 0 && ( Suffix:{" "} {getSuffix(provider, accountNumber)} )} */} setShowProvider(false)} title="Select Provider" > {providers.map((p) => ( { setProvider(v); setAccountNumber(""); setShowProvider(false); }} /> ))} ); }