import { redirect } from 'next/navigation'
import { headers } from 'next/headers'
import { getAppOriginFromEnv, getAppOriginFromHeaders } from '@/lib/url/appUrl'
import { loadRoomPlaybackData } from '@/lib/room/loadRoomPlaybackData'
import EmbedRoomClient from './EmbedRoomClient'

export const runtime = 'nodejs'
export const dynamic = 'force-dynamic'

export default async function EmbedRoomPage({ params }: { params: { id: string } }) {
    const routeParam = String(params?.id ?? '').trim()
    const loaded = await loadRoomPlaybackData(routeParam)

    if (!loaded) {
        redirect('/')
    }

    if (loaded.shouldRedirect) {
        redirect(`/embed/stream/${encodeURIComponent(loaded.publicRoomId)}`)
    }

    const h = headers()
    const origin = getAppOriginFromEnv() || getAppOriginFromHeaders(h) || ''
    const roomUrl = origin
        ? `${origin.replace(/\/$/, '')}/room/${encodeURIComponent(loaded.publicRoomId)}`
        : `/room/${encodeURIComponent(loaded.publicRoomId)}`

    return (
        <EmbedRoomClient
            roomId={loaded.roomId}
            roomUrl={roomUrl}
            initialStream={loaded.stream}
            initialIsLiveStream={loaded.isLive}
            initialPlaybackSrc={loaded.playbackSrc}
        />
    )
}

export async function generateMetadata({ params }: { params: { id: string } }) {
    const loaded = await loadRoomPlaybackData(String(params?.id ?? '').trim())
    if (!loaded) {
        return { title: 'NoiR' }
    }
    const name = loaded.stream.channelName || 'NoiR'
    const title = loaded.stream.title?.trim()
    return {
        title: title ? `${name} — ${title}` : name,
        robots: { index: false, follow: false },
    }
}
