import { useState } from 'react' import { redirectToStripeCheckout } from '../stripe' interface GoldOption { gold_amount: number price: string } interface Props { url: string csrfToken: string characters: string[] options: GoldOption[] } export function GoldForm({ url, csrfToken, characters, options }: Props) { const [character, setCharacter] = useState('') const [amount, setAmount] = useState('') const [busy, setBusy] = useState(false) const [message, setMessage] = useState<{ ok: boolean; html: string } | null>(null) async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (busy) return setBusy(true) setMessage(null) const body = new URLSearchParams() body.set('character', character) body.set('gold_amount', amount) body.set('csrfmiddlewaretoken', csrfToken) try { const resp = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-CSRFToken': csrfToken, Accept: 'application/json', }, credentials: 'same-origin', body: body.toString(), }) if (!resp.ok) throw new Error(`HTTP ${resp.status}`) const data: { success?: boolean; message?: string; session_id?: string; stripe_public_key?: string } = await resp.json() if (data.success && data.session_id && data.stripe_public_key) { await redirectToStripeCheckout(data.stripe_public_key, data.session_id) return } setMessage({ ok: !!data.success, html: data.message || '' }) setBusy(false) } catch { setMessage({ ok: false, html: 'Error al iniciar el pago. Inténtalo más tarde.' }) setBusy(false) } } return (