'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import { startRound } from '@/app/actions/rounds' import { inviteFromLobby } from '@/app/actions/invites' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { ChevronLeft, Plus, X } from 'lucide-react' import Link from 'next/link' type Player = { id: string role: string handicap_index: number | null course_handicap: number | null profile: { id: string; display_name: string; avatar_url: string | null } | null } type Invite = { id: string email: string accepted_at: string | null created_at: string } type Round = { id: string name: string | null date: string status: string holes_count: number created_by: string course: { id: string; name: string; par: number } | null tee: { id: string; name: string; color: string; course_rating: number; slope_rating: number } | null } export function RoundLobby({ round, players, pendingInvites, currentUserId, isCreator, }: { round: Round players: Player[] pendingInvites: Invite[] currentUserId: string isCreator: boolean }) { const router = useRouter() const [emailInput, setEmailInput] = useState('') const [inviteError, setInviteError] = useState(null) const [inviting, setInviting] = useState(false) const [starting, setStarting] = useState(false) const [startError, setStartError] = useState(null) async function handleInvite() { const email = emailInput.trim().toLowerCase() if (!email) return setInviting(true) setInviteError(null) const result = await inviteFromLobby(round.id, email) if (result.error) { setInviteError(result.error) } else { setEmailInput('') router.refresh() } setInviting(false) } async function handleStart() { setStarting(true) setStartError(null) const result = await startRound(round.id) if (result.error) { setStartError(result.error) setStarting(false) } else { router.refresh() } } return (
{/* Header */}

{round.name ?? round.course?.name ?? 'Round'}

{round.course?.name} · {round.tee?.name} tees ·{' '} {round.holes_count} holes ·{' '} {new Date(round.date).toLocaleDateString()}

Lobby
{/* Players */}

Players ({players.length})

{players.map((p) => (
{p.profile?.display_name} {p.profile?.id === currentUserId && ( (you) )} {p.role === 'admin' && ( creator )}
{p.handicap_index !== null ? `HCP ${p.handicap_index} · Course HCP ${p.course_handicap}` : 'No handicap'}
))}
{/* Pending invites */} {pendingInvites.length > 0 && (

Awaiting ({pendingInvites.length})

{pendingInvites.map((invite) => (
{invite.email}
))}
)} {/* Invite form (creator only, lobby only) */} {isCreator && round.status === 'lobby' && (

Invite player

setEmailInput(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleInvite()} placeholder="player@example.com" className="flex-1" />
{inviteError && (

{inviteError}

)}
)} {/* Start round button */} {isCreator && round.status === 'lobby' && (
{startError && (

{startError}

)}
)}
) } function Avatar({ name, url }: { name: string; url?: string | null }) { const initials = name .split(' ') .map((n) => n[0]) .join('') .toUpperCase() .slice(0, 2) if (url) { return ( {name} ) } return (
{initials}
) }