import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useQuery } from '@tanstack/react-query' import { balanceApi } from '../api/balance' import { useCurrency } from '../hooks/useCurrency' import TopUpModal from './TopUpModal' import type { PaymentMethod } from '../types' interface InsufficientBalancePromptProps { /** Amount missing in kopeks */ missingAmountKopeks: number /** Optional custom message */ message?: string /** Compact mode for inline use */ compact?: boolean /** Additional className */ className?: string } export default function InsufficientBalancePrompt({ missingAmountKopeks, message, compact = false, className = '', }: InsufficientBalancePromptProps) { const { t } = useTranslation() const { formatAmount, currencySymbol } = useCurrency() const [showMethodSelect, setShowMethodSelect] = useState(false) const [selectedMethod, setSelectedMethod] = useState(null) const { data: paymentMethods } = useQuery({ queryKey: ['payment-methods'], queryFn: balanceApi.getPaymentMethods, enabled: showMethodSelect, }) const missingRubles = missingAmountKopeks / 100 const displayAmount = formatAmount(missingRubles) const handleMethodSelect = (method: PaymentMethod) => { setSelectedMethod(method) setShowMethodSelect(false) } if (compact) { return ( <>
{message || t('balance.insufficientFunds')}: {displayAmount} {currencySymbol}
{showMethodSelect && ( setShowMethodSelect(false)} /> )} {selectedMethod && ( setSelectedMethod(null)} /> )} ) } return ( <>
{t('balance.insufficientFunds')}
{message || t('balance.topUpToComplete')}
{t('balance.missing')}: {displayAmount} {currencySymbol}
{showMethodSelect && ( setShowMethodSelect(false)} /> )} {selectedMethod && ( setSelectedMethod(null)} /> )} ) } interface PaymentMethodModalProps { paymentMethods: PaymentMethod[] | undefined onSelect: (method: PaymentMethod) => void onClose: () => void } function PaymentMethodModal({ paymentMethods, onSelect, onClose }: PaymentMethodModalProps) { const { t } = useTranslation() const { formatAmount, currencySymbol } = useCurrency() return (

{t('balance.selectPaymentMethod')}

{!paymentMethods ? (
) : paymentMethods.length === 0 ? (
{t('balance.noPaymentMethods')}
) : (
{paymentMethods.map((method) => { const methodKey = method.id.toLowerCase().replace(/-/g, '_') const translatedName = t(`balance.paymentMethods.${methodKey}.name`, { defaultValue: '' }) const translatedDesc = t(`balance.paymentMethods.${methodKey}.description`, { defaultValue: '' }) return ( ) })}
)}
) }