"use client"; import { useCallback, useMemo, useState } from "react"; import { performSingleCheckout } from "@/entities/payment/actions"; import { PaymentInfo, SingleCheckoutRequest } from "@/entities/payment/types"; interface UseSingleCheckoutOptions { onSuccess?: () => void; onError?: (error: string) => void; } export function useSingleCheckout(options: UseSingleCheckoutOptions = {}) { const [isLoading, setIsLoading] = useState(false); const { onSuccess, onError } = options; const handleSingleCheckout = useCallback( async (paymentInfo: PaymentInfo) => { if (isLoading) return; setIsLoading(true); try { const payload: SingleCheckoutRequest = { paymentInfo, }; const response = await performSingleCheckout(payload); if (response.error) { onError?.(response.error); return; } if (!response.data) { onError?.("Payment failed"); return; } if ("payment" in response.data) { const { status } = response.data.payment; if (status === "paid") { onSuccess?.(); } else { onError?.("Payment status is not paid"); } } else { const errorMessage = response.data.message || "Payment failed"; onError?.(errorMessage); } } catch (error) { const errorMessage = error instanceof Error ? error.message : "Payment failed"; onError?.(errorMessage); } finally { setIsLoading(false); } }, [onSuccess, onError, isLoading] ); return useMemo( () => ({ handleSingleCheckout, isLoading, }), [handleSingleCheckout, isLoading] ); }