import type { Metadata } from 'next';
import { notFound } from 'next/navigation';
import { findPlayRoom } from '../_lib/room';
import { PlayApp } from '../_ui/PlayApp';

type SearchParams = Record<string, string | string[] | undefined>;
interface Props {
  params: Promise<{ roomId: string }>;
  searchParams: Promise<SearchParams>;
}

export async function generateMetadata({ params }: Props): Promise<Metadata> {
  const room = await findPlayRoom((await params).roomId);
  return {
    title: room ? `Playing at ${room.venue.name}` : 'Game not found',
    robots: { index: false, follow: false },
  };
}

export default async function PlayPage({ params, searchParams }: Props) {
  const [{ roomId }, query] = await Promise.all([params, searchParams]);
  const room = await findPlayRoom(roomId);
  if (!room) notFound();
  const embedParam = query.embed;
  const embed = (Array.isArray(embedParam) ? embedParam[0] : embedParam) === '1';
  const joinHref = `/join/${encodeURIComponent(room.venue.joinCode)}?room=${room.id}${embed ? '&embed=1' : ''}`;
  return <PlayApp roomId={room.id} venueName={room.venue.name} roomName={room.name} joinHref={joinHref} embed={embed} />;
}
