import type { GpLiveDb } from '@/server/gpLiveDb'
import { pickRowString } from '@/server/pgRow'

type Db = GpLiveDb

export type ResolvedRoomRoute = {
    roomId: string
    publicRoomId: string
    shouldRedirect: boolean
}

export async function resolveRoomRouteParam(db: Db, rawParam: string): Promise<ResolvedRoomRoute | null> {
    const param = String(rawParam || '').trim()
    if (!param) return null

    const user = await db.get<Record<string, unknown>>(
        `SELECT user_id AS userId, display_id AS displayId
         FROM users
         WHERE user_id = ? OR display_id = ?
         ORDER BY CASE WHEN display_id = ? THEN 0 ELSE 1 END
         LIMIT 1`,
        [param, param, param]
    )

    const userId = pickRowString(user, 'userId', 'user_id')
    if (!userId) return null

    const displayId = pickRowString(user, 'displayId', 'display_id')
    const publicRoomId = displayId || userId

    return {
        roomId: userId,
        publicRoomId,
        shouldRedirect: Boolean(displayId && param === userId && displayId !== userId),
    }
}
