import { useState } from 'react'; import { useNavigate, useLocation } from 'react-router'; import { useTranslation } from 'react-i18next'; import { useCurrency } from '../hooks/useCurrency'; interface InsufficientBalancePromptProps { /** Amount missing in kopeks */ missingAmountKopeks: number; /** Optional custom message */ message?: string; /** Compact mode for inline use */ compact?: boolean; /** Additional className */ className?: string; /** Callback to execute before opening top-up modal (e.g., save cart) */ onBeforeTopUp?: () => Promise; } export default function InsufficientBalancePrompt({ missingAmountKopeks, message, compact = false, className = '', onBeforeTopUp, }: InsufficientBalancePromptProps) { const { t } = useTranslation(); const navigate = useNavigate(); const location = useLocation(); const { formatAmount, currencySymbol } = useCurrency(); const [isPreparingTopUp, setIsPreparingTopUp] = useState(false); const missingRubles = missingAmountKopeks / 100; const displayAmount = formatAmount(missingRubles); const handleTopUpClick = async () => { if (onBeforeTopUp) { setIsPreparingTopUp(true); try { await onBeforeTopUp(); } catch { // Silently ignore errors - still navigate } finally { setIsPreparingTopUp(false); } } const params = new URLSearchParams(); params.set('amount', String(Math.ceil(missingRubles))); params.set('returnTo', location.pathname); navigate(`/balance/top-up?${params.toString()}`); }; if (compact) { return (
{message || t('balance.insufficientFunds')}:{' '} {displayAmount} {currencySymbol}
); } return (
{t('balance.insufficientFunds')}
{message || t('balance.topUpToComplete')}
{t('balance.missing')}:{' '} {displayAmount} {currencySymbol}
); }