import { useState } from 'react'; import { api } from '../lib/api'; import { PageHeader } from '../components/PageHeader'; import { useToast } from '../components/Toast'; export function Broadcast() { const [message, setMessage] = useState(''); const [minutes, setMinutes] = useState(''); const [busy, setBusy] = useState(false); const toast = useToast(); const startsInMinutes = minutes.trim() === '' ? null : Number(minutes); const minutesValid = startsInMinutes === null || (Number.isInteger(startsInMinutes) && startsInMinutes >= 0); const canSend = !busy && minutesValid && (message.trim() !== '' || startsInMinutes !== null); const send = async (e: React.FormEvent) => { e.preventDefault(); if (!canSend) return; const parts = [ message.trim() && `"${message.trim()}"`, startsInMinutes !== null && (startsInMinutes === 0 ? 'Cancel the maintenance countdown' : `Maintenance countdown: ${startsInMinutes} min`), ].filter(Boolean); if (!confirm(`Broadcast this to every connected player?\n\n${parts.join('\n')}`)) return; setBusy(true); try { const res = await api<{ recipients: number }>('/broadcast', { method: 'POST', body: { Message: message.trim() || null, StartsInMinutes: startsInMinutes }, }); toast.push(`Broadcast sent to ${res.recipients} player(s)`, 'success'); setMessage(''); setMinutes(''); } catch (e) { toast.push((e as Error).message, 'error'); } finally { setBusy(false); } }; return (