import { NextRequest, NextResponse } from 'next/server'
import { getDb } from '@/server/db'
import { getUserIdFromRequest } from '../../_helpers/session'
import { formatDateTime } from '@/utils/formatDate'

export const runtime = 'nodejs'

export async function GET(request: NextRequest) {
    try {
        const userId = await getUserIdFromRequest(request)
        if (!userId) {
            return NextResponse.json(
                { ok: false, message: 'Unauthorized' },
                { status: 401 }
            )
        }
        const db = await getDb()
        const blockedUsers = await db.all<{
            targetId: string
            createdAt: number
            displayName: string
            avatar: string | null
        }>( 
            `SELECT 
                ua.target_id AS targetId,
                ua.created_at AS createdAt,
                u.display_name AS displayName,
                u.avatar_url AS avatar
             FROM user_actions ua
             INNER JOIN users u ON ua.target_id = u.user_id
             WHERE ua.user_id = ? AND ua.action_type = 'block'
             ORDER BY ua.created_at DESC`,
            [userId]
        )
        const result = (blockedUsers ?? []).map((user) => ({
            id: user.targetId,
            displayName: user.displayName,
            avatar: user.avatar || null,
            blockedAt: formatDateTime(new Date(user.createdAt * 1000).toISOString()),
        }))
        return NextResponse.json({
            ok: true,
            data: result,
        })
    } catch (error: any) {
        console.error('Failed to fetch blocked users:', error)
        return NextResponse.json(
            { ok: false, message: error?.message || 'Failed to fetch blocked users' },
            { status: 500 }
        )
    }
}

