import React from "react";
import { View, Text, StyleSheet, TouchableOpacity } from "react-native";
import { useRouter } from "expo-router";
import { useSelector } from "react-redux";
import { RootState } from "@/store/rootReducer";
import Header from "@/components/common/Header";
import CheckCircle from "@/assets/icons/check_circle.svg";
import Pending from "@/assets/icons/pending.svg";
import Failed from "@/assets/icons/cancel.svg";
import { useSafeAreaInsets } from "react-native-safe-area-context";
const PaymentConfirmationScreen = () => {
const router = useRouter();
const { paymentOrder, due_amount } = useSelector(
(state: RootState) => state.payments
);
const insets = useSafeAreaInsets();
// Get payment status - assuming it comes from paymentOrder.status
const paymentStatus = paymentOrder?.status || "confirmed";
// Format amount with currency
const formatAmount = (amount: number | null) => {
if (!amount) return "₹0";
return `₹${amount.toLocaleString("en-IN")}`;
};
// Format date
const formatDate = (dateString?: string) => {
if (!dateString)
return new Date().toLocaleString("en-IN", {
day: "numeric",
month: "long",
year: "numeric",
hour: "numeric",
minute: "2-digit",
hour12: true,
weekday: "long",
});
return new Date(dateString).toLocaleString("en-IN", {
day: "numeric",
month: "long",
year: "numeric",
hour: "numeric",
minute: "2-digit",
hour12: true,
weekday: "long",
});
};
// Get icon and text based on status
const getStatusDisplay = () => {
switch (paymentStatus) {
case "confirmed":
return {
icon: ,
text: "Payment successful",
iconContainerStyle: styles.successIconContainer,
};
case "failure":
return {
icon: ,
text: "Payment failed",
iconContainerStyle: styles.failureIconContainer,
};
case "pending":
return {
icon: ,
text: "Payment pending",
iconContainerStyle: styles.pendingIconContainer,
};
default:
return {
icon: ,
text: "Payment successful",
iconContainerStyle: styles.successIconContainer,
};
}
};
const statusDisplay = getStatusDisplay();
// Helper function to display value or "--" if missing
const displayValue = (value: any) => {
return value ? String(value) : "--";
};
return (
{statusDisplay.icon}
{formatAmount(paymentOrder?.amount || due_amount)}
{statusDisplay.text}
{formatDate(paymentOrder?.transaction_date)}
Transaction Details
Payment mode
{displayValue(paymentOrder?.payment_mode?.[0])}
Paid to
{displayValue(paymentOrder?.upi_handle)}
Paid by
{displayValue(paymentOrder?.paid_by_upi_handle)}
Order ID
{displayValue(paymentOrder?.order_id)}
Transaction ID
{displayValue(
paymentOrder?.transaction_id ||
paymentOrder?.transaction_order_id
)}
RRN
{displayValue(paymentOrder?.payment_reference_id)}
router.replace("/(tabs)/payments")}
>
OK
);
};
export default PaymentConfirmationScreen;
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#f3f4f6", // Light gray background
},
contentFrame: {
flex: 1,
paddingHorizontal: 16,
paddingBottom: 16,
justifyContent: "space-between",
marginTop: 8,
},
qrFrame: {
backgroundColor: "#fcfcfc",
borderRadius: 8,
padding: 16,
paddingVertical: 32,
},
paymentStatusContainer: {
alignItems: "center",
},
successIconContainer: {
marginBottom: 16,
alignItems: "center",
},
failureIconContainer: {
marginBottom: 16,
alignItems: "center",
},
pendingIconContainer: {
marginBottom: 16,
alignItems: "center",
},
successIcon: {
// Icon styling handled by Ionicons
},
amountText: {
fontSize: 20,
fontWeight: "600",
color: "#252a34",
textAlign: "center",
marginBottom: 16,
},
statusContainer: {
alignItems: "center",
gap: 4,
},
statusText: {
fontSize: 14,
color: "#252a34",
textAlign: "center",
},
dateText: {
fontSize: 14,
color: "#252a34",
textAlign: "center",
},
divider: {
height: 1,
backgroundColor: "#e5e9f0",
marginVertical: 24,
},
transactionContainer: {
gap: 8,
},
sectionHeader: {
fontSize: 14,
fontWeight: "600",
color: "#252a34",
},
detailRow: {
flexDirection: "row",
justifyContent: "space-between",
alignItems: "flex-start",
paddingVertical: 2,
},
detailLabel: {
fontSize: 14,
color: "#252a34",
flex: 1,
},
detailValue: {
fontSize: 14,
fontWeight: "600",
color: "#252a34",
textAlign: "left",
flex: 1,
},
primaryButton: {
backgroundColor: "#008761",
height: 40,
borderRadius: 4,
justifyContent: "center",
alignItems: "center",
},
buttonText: {
color: "#fcfcfc",
fontSize: 14,
fontWeight: "500",
},
});