import React from 'react'; import MarketingLayout from '@/layouts/mainWebsite'; import { useTranslation } from 'react-i18next'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { fetchGiftVoucherByCode, type GiftVoucherLookupResponse } from '@/lib/giftVouchers'; import { useRateLimitHelper } from '@/hooks/useRateLimitHelper'; const GiftVoucherStatus: React.FC = () => { const { t, i18n } = useTranslation('marketing'); const [code, setCode] = React.useState(''); const [result, setResult] = React.useState(null); const [error, setError] = React.useState(null); const [loading, setLoading] = React.useState(false); const rateLimit = useRateLimitHelper('voucher'); const onLookup = async () => { if (rateLimit.isLimited(code)) { setError(t('gift.too_many_attempts')); return; } setLoading(true); setError(null); setResult(null); try { const data = await fetchGiftVoucherByCode(code); if (data) { setResult(data); rateLimit.clear(code); } else { setError(t('gift.lookup_not_found')); rateLimit.bump(code); } } catch (e: any) { setError(e?.message || t('gift.lookup_not_found')); rateLimit.bump(code); } finally { setLoading(false); } }; return (

{t('gift.lookup_title')}

{t('gift.lookup_subtitle')}

{t('gift.lookup_label')} {t('gift.lookup_subtitle')}
setCode(e.target.value)} />
{error &&

{error}

} {result && (

{t('gift.lookup_result_code', { code: result.code })}

{t('gift.lookup_result_value', { amount: result.amount.toFixed(2), currency: result.currency, })}

{result.expires_at && (

{t('gift.lookup_result_expires', { date: new Date(result.expires_at).toLocaleDateString(i18n.language), })}

)}

{t(`gift.lookup_status.${result.status}`, result.status)}

)}
); }; GiftVoucherStatus.layout = (page: React.ReactNode) => page; export default GiftVoucherStatus;