'use client'

import { useState } from 'react'
import { useTranslations } from 'next-intl'
import type { BattlepayOrder } from '@/lib/battlepay'

export function BattlepayList({ orders }: { orders: BattlepayOrder[] }) {
  const t = useTranslations('Battlepay')
  const [busy, setBusy] = useState<string | null>(null)
  const [error, setError] = useState<string | null>(null)

  async function pay(reference: string) {
    if (busy) return
    setBusy(reference)
    setError(null)
    try {
      const res = await fetch('/api/battlepay/pay', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        credentials: 'same-origin',
        body: JSON.stringify({ reference }),
      })
      const d: { success?: boolean; url?: string; error?: string } = await res.json()
      if (d.success && d.url) {
        // .assign() y no `location.href = …`: equivalente, pero la regla del
        // compilador de React prohíbe asignar a algo de fuera del componente.
        window.location.assign(d.url)
      } else {
        setError(t(d.error === 'orderNotFound' ? 'orderNotFound' : 'genericError'))
        setBusy(null)
      }
    } catch {
      setError(t('genericError'))
      setBusy(null)
    }
  }

  if (orders.length === 0) return <p className="second-brown">{t('noOrders')}</p>

  return (
    <div>
      <div className="alert-message" style={{ display: error ? 'block' : 'none' }}>
        {error && <span className="red-form-response">{error}</span>}
      </div>
      <table className="max-center-table">
        <tbody>
          {orders.map((o) => (
            <tr key={o.id} className="info-box-light">
              <td className="separate">
                <span className="yellow-info">{o.product_name}</span>
                <br />
                <span className="third-brown small-font">
                  {t('reference')}: {o.reference}
                  {o.created_at ? ` · ${new Date(o.created_at * 1000).toLocaleDateString()}` : ''}
                </span>
              </td>
              <td className="real-info-box">
                <span className="yellow-info">{o.price_eur.toFixed(2)} €</span>
              </td>
              <td className="real-info-box">
                <button type="button" onClick={() => pay(o.reference)} disabled={busy !== null}>
                  {busy === o.reference ? t('redirecting') : t('pay')}
                </button>
              </td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  )
}
