import { useState } from 'react' import { redirectToStripeCheckout } from '../stripe' interface Props { url: string csrfToken: string characters: string[] price: string } export function TransferForm({ url, csrfToken, characters, price }: Props) { const [character, setCharacter] = useState('') const [destination, setDestination] = useState('') const [token, setToken] = 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('destination_account', destination.trim()) body.set('security_token', token.trim()) 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 (

setDestination(e.target.value)} />
setToken(e.target.value)} />

{message && }
) }