import { NextRequest, NextResponse } from 'next/server'
import { getDb } from '@/server/db'
import { getUserCoinBalance } from '@/server/users/coinBalance'
import { validateSession } from '../../_helpers/session'
import { pickRowString, readDisplayName } from '@/server/pgRow'

export async function GET(request: NextRequest) {
    try {
        const userId = await validateSession(request)

        if (!userId) {
            return NextResponse.json({
                ok: false,
                message: 'Unauthorized',
            }, { status: 401 })
        }

        const db = await getDb()

        const user = await db.get<Record<string, unknown>>(
            `SELECT user_id AS id, display_name AS displayName, email, avatar_url AS avatar, has_change_nickname AS hasChangedNickname
             FROM users
             WHERE user_id = ?`,
            [userId]
        )

        if (!user) {
            return NextResponse.json({
                ok: false,
                message: 'User not found',
            })
        }

        const displayName = readDisplayName(user)
        const userRowId = pickRowString(user, 'id', 'user_id')
        const avatar = pickRowString(user, 'avatar', 'avatar_url') || null
        const email = pickRowString(user, 'email') || ''
        const hasChangedNickname =
            Number(pickRowString(user, 'hasChangedNickname', 'has_change_nickname')) === 1

        // TODO: 從實際的 SNS 帳號表取得
        const snsAccount = {
            type: 'Google',
            date: '2025.12.14',
        }

        const coinBalance = await getUserCoinBalance(db, userId)

        return NextResponse.json({
            ok: true,
            nickname: displayName,
            id: userRowId,
            email,
            avatarUrl: avatar,
            hasChangedNickname,
            coinBalance: coinBalance ?? 0,
            snsAccount,
        })
    } catch (error: any) {
        console.error('Failed to fetch user info:', error)
        return NextResponse.json(
            { ok: false, message: error?.message || 'Failed to fetch user info' },
            { status: 500 }
        )
    }
}

