import { cookies } from 'next/headers'
import { getDb } from '@/server/db'
import { USER_AUTH_SQL } from '@/server/userAuthSql'
import { SESSION_ID_COOKIE } from './constants'
import type { UserInfo } from './types'
import { pickRowString, readDisplayName } from '@/server/pgRow'

/**
 * 在 Server Component 中取得使用者資訊
 * 通過 session ID 查詢使用者資訊，不直接從 cookie 讀取使用者 ID
 */
export async function getUserInfo(): Promise<UserInfo | null> {
    try {
        const jar = cookies()
        const sessionId = jar.get(SESSION_ID_COOKIE)?.value
        if (!sessionId) {
            return null
        }
        const db = await getDb()
        const session = await db.get<Record<string, unknown>>(
            USER_AUTH_SQL.selectSessionUserId,
            [sessionId]
        )
        const sessionUserId = pickRowString(session, 'userId', 'user_id')
        if (!sessionUserId) {
            return null
        }
        const user = await db.get<Record<string, unknown>>(
            `SELECT user_id AS id, display_name AS displayName, avatar_url AS avatar
             FROM users
             WHERE user_id = ?`,
            [sessionUserId]
        )
        if (!user) {
            return null
        }
        return {
            nickname: readDisplayName(user),
            id: pickRowString(user, 'id', 'user_id'),
            avatarUrl: pickRowString(user, 'avatar', 'avatar_url') || null,
        }
    } catch (error) {
        console.error('Failed to get user info:', error)
        return null
    }
}

