'use client' import { useState } from 'react' import { useTranslations } from 'next-intl' import type { RecruitReward } from '@/lib/admin-recruit' const EMPTY = { requiredFriends: '', rewardName: '', itemId: '', itemQuantity: '1', itemLink: '', iconClass: '' } export function AdminRecruitManager({ initial }: { initial: RecruitReward[] }) { const t = useTranslations('Admin') const [rewards, setRewards] = useState(initial) const [form, setForm] = useState(EMPTY) const [busy, setBusy] = useState(false) function upd(k: string, v: string) { setForm((f) => ({ ...f, [k]: v })) } async function create(e: React.FormEvent) { e.preventDefault() if (busy || !(Number(form.requiredFriends) > 0) || !form.rewardName.trim() || !(Number(form.itemId) > 0)) return setBusy(true) try { const res = await fetch('/api/admin/recruit', { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin', body: JSON.stringify(form), }) const data: { success?: boolean; id?: number } = await res.json() if (data.success && data.id) { setRewards( [ ...rewards, { id: data.id, required_friends: Number(form.requiredFriends), reward_name: form.rewardName, item_id: Number(form.itemId), item_quantity: Number(form.itemQuantity) || 1, item_link: form.itemLink, icon_class: form.iconClass, }, ].sort((a, b) => a.required_friends - b.required_friends), ) setForm(EMPTY) } } finally { setBusy(false) } } async function remove(id: number) { if (!confirm(t('confirmDelete'))) return const res = await fetch(`/api/admin/recruit/${id}`, { method: 'DELETE', credentials: 'same-origin' }) if ((await res.json()).success) setRewards(rewards.filter((r) => r.id !== id)) } return (
{t('requiredFriends')} upd('requiredFriends', e.target.value)} placeholder="1" /> {t('rewardName')} upd('rewardName', e.target.value)} placeholder="Montura épica" /> {t('itemId')} upd('itemId', e.target.value)} placeholder="49284" /> {t('itemQuantity')} upd('itemQuantity', e.target.value)} /> {t('itemLink')} upd('itemLink', e.target.value)} placeholder="https://…" /> {t('iconClass')} upd('iconClass', e.target.value)} placeholder="icontinyl q3" />

{rewards.length === 0 ? (

{t('noRewards')}

) : ( {rewards.map((r) => ( ))}
{r.reward_name}

{t('requiredFriendsShort', { n: r.required_friends })} · item {r.item_id} ×{r.item_quantity}

)}
) }