"use client"; import { useEffect, useState } from "react"; import { useParams, useRouter } from "next/navigation"; import { request } from "@/services/response"; import Cookies from "js-cookie"; import Layout from "@/components/layout"; export default function PaymentDetailsPage() { const params = useParams(); const router = useRouter(); const [payment, setPayment] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [paying, setPaying] = useState(false); const handleRetryPayment = async () => { if (!payment?.appointment_uuid) return; setPaying(true); try { const res = await request.postAppointmentPayment({ appointment_uuid: payment.appointment_uuid, gateway: payment.gateway || "mellat", frontend_address: `${window.location.origin}/payment/result`, }); const redirectUrl = res?.data?.redirect_url; if (redirectUrl) { window.location.href = redirectUrl; } else { setPaying(false); } } catch { setPaying(false); } }; useEffect(() => { // بررسی لاگین بودن کاربر const userInfo = Cookies.get("userInfo"); if (!userInfo) { router.push("/login"); return; } const fetchPaymentDetails = async () => { try { setLoading(true); const response = await request.getPayment(params.uuid); setPayment(response?.data?.data ?? null); } catch (err) { setError("خطا در دریافت اطلاعات پرداخت"); console.error("Payment fetch error:", err); } finally { setLoading(false); } }; if (params.uuid) { fetchPaymentDetails(); } }, [params.uuid, router]); const getStatusLabel = (status) => { const statusMap = { pending: "در انتظار پرداخت", success: "پرداخت موفق", failed: "پرداخت ناموفق", refunded: "مسترد شده", }; return statusMap[status] || status; }; const getStatusColor = (status) => { const colorMap = { pending: "text-yellow-600 bg-yellow-50", success: "text-green-600 bg-green-50", failed: "text-red-600 bg-red-50", refunded: "text-gray-600 bg-gray-50", }; return colorMap[status] || "text-gray-600 bg-gray-50"; }; const getPaymentMethodLabel = (method) => { const methodMap = { mellat: "بانک ملت", sep: "سامان (سپ)", mock: "درگاه آزمایشی", }; return methodMap[method] || method; }; const formatDate = (timestamp) => { const date = new Date(parseInt(timestamp) * 1000); return new Intl.DateTimeFormat("fa-IR", { year: "numeric", month: "long", day: "numeric", hour: "2-digit", minute: "2-digit", }).format(date); }; const formatAmount = (rials) => { return new Intl.NumberFormat("fa-IR").format(Math.round(parseInt(rials) / 10)); }; if (loading) { return (

در حال بارگذاری...

); } if (error) { return (

{error}

); } if (!payment) { return null; } return (

جزئیات پرداخت

{/* وضعیت پرداخت */}
وضعیت: {getStatusLabel(payment.status)}
{/* مبلغ */}
مبلغ: {formatAmount(payment.amount_rials)} تومان
{/* روش پرداخت */}
روش پرداخت: {getPaymentMethodLabel(payment.gateway)}
{/* شناسه پرداخت */}
شناسه پرداخت: {payment.uuid}
{/* شماره مرجع */} {payment.reference_id && (
شماره مرجع: {payment.reference_id}
)} {/* تاریخ ایجاد */}
تاریخ ایجاد: {formatDate(payment.created_at)}
{/* نوع سرویس */}
نوع سرویس: {payment.type === "appointment" ? "رزرو نوبت" : payment.type}
{/* دکمه‌ها */}
{payment.status === "pending" ? ( <> ) : null}
); }