'use client' import { useState } from 'react' import { useTranslations } from 'next-intl' import { useRouter } from '@/i18n/navigation' import type { GmGuild } from '@/lib/guild' function renameErrorKey(error?: string): string { switch (error) { case 'missingFields': case 'invalidName': case 'invalidToken': case 'notGuildMaster': case 'nameTaken': case 'insufficientPoints': case 'soapError': case 'notAuthenticated': return error default: return 'generic' } } export function RenameGuildForm({ guilds }: { guilds: GmGuild[] }) { const t = useTranslations('Points') const renameError = (error?: string) => t(`renameGuild.errors.${renameErrorKey(error)}`) const router = useRouter() const [guildId, setGuildId] = useState('') const [newName, setNewName] = useState('') const [token, setToken] = useState('') const [showToken, setShowToken] = useState(false) const [busy, setBusy] = useState(false) const [done, setDone] = useState(false) const [message, setMessage] = useState<{ ok: boolean; text: string } | null>(null) if (guilds.length === 0) { return (

{t('renameGuild.noGuilds')}
) } async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (busy || done) return if (!guildId || !newName.trim() || !token.trim()) { setMessage({ ok: false, text: renameError('missingFields') }) return } if (!window.confirm(t('renameGuild.confirm'))) return setBusy(true) setMessage(null) try { const res = await fetch('/api/guild/rename', { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin', body: JSON.stringify({ guildId: Number(guildId), newName: newName.trim(), token: token.trim() }), }) const data: { success?: boolean; error?: string; newName?: string } = await res.json() if (data.success) { setDone(true) setMessage({ ok: true, text: t('renameGuild.success', { newName: data.newName ?? '' }) }) setNewName('') setToken('') setTimeout(() => router.refresh(), 3000) } else { setMessage({ ok: false, text: renameError(data.error) }) } } catch { setMessage({ ok: false, text: renameError() }) } finally { setBusy(false) } } return (
setNewName(e.target.value)} required />
setToken(e.target.value)} required />{' '} setShowToken((s) => !s)} />

{message && {message.text}}
) }