'use client' import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { useParams } from 'next/navigation' import { RiLoader4Line, RiShieldLine, RiSwordLine } from '@remixicon/react' import { fetchRedBlueLeaderboard, submitRedBluePrompt } from '@/service/redBlueChallenges' import Button from '@/app/components/base/button' import Textarea from '@/app/components/base/textarea' import Toast from '@/app/components/base/toast' export default function RedBlueChallengeDetailPage() { const { t } = useTranslation() const params = useParams() const id = params?.id as string const [team, setTeam] = useState<'red' | 'blue' | null>(null) const [prompt, setPrompt] = useState('') const [submitting, setSubmitting] = useState(false) const [lastResult, setLastResult] = useState(null) const [leaderboard, setLeaderboard] = useState(null) useEffect(() => { const load = async () => { try { const leaders = await fetchRedBlueLeaderboard(id) setLeaderboard(leaders) } catch (e: any) { console.error('Failed to load leaderboard:', e) } } if (id) load() }, [id]) const handleSubmit = async () => { if (!team || !prompt.trim()) { Toast.notify({ type: 'error', message: 'Please choose a team and enter a prompt' }) return } setSubmitting(true) setLastResult(null) try { const result = await submitRedBluePrompt(id, team, prompt) setLastResult(result) Toast.notify({ type: 'success', message: 'Prompt submitted!' }) setPrompt('') // Refresh leaderboard const leaders = await fetchRedBlueLeaderboard(id) setLeaderboard(leaders) } catch (e: any) { Toast.notify({ type: 'error', message: e.message || 'Submission failed' }) } finally { setSubmitting(false) } } return (

{t('challenges.redBlue.title')}

Join the Red or Blue team and compete

{!team ? (
) : (

{team === 'red' ? t('challenges.redBlue.submitAttack') : t('challenges.redBlue.submitDefense')}