import { NextRequest, NextResponse } from 'next/server'
import { getUserIdFromRequest } from '@/app/api/_helpers/session'
import { canReviewGroupApplications } from '@/server/groups/groupApply'
import { listGroupLogs } from '@/server/groups/listGroupLogs'
import { getDb } from '@/server/db'
import { resolveGroupIdFromParam } from '@/server/groups/groupIdUtils'

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

export async function GET(
    request: NextRequest,
    { params }: { params: { id: string } }
) {
    try {
        const routeParam = String(params?.id ?? '').trim()
        const userId = await getUserIdFromRequest(request)
        if (!routeParam) {
            return NextResponse.json({ ok: false, message: 'Invalid group id' }, { status: 400 })
        }
        if (!userId) {
            return NextResponse.json({ ok: false, message: 'Unauthorized' }, { status: 401 })
        }

        const db = await getDb()
        const groupId = await resolveGroupIdFromParam(db, routeParam)
        if (!groupId) {
            return NextResponse.json({ ok: false, message: 'Group not found' }, { status: 404 })
        }

        const membership = await db.get<{ role: string }>(
            `SELECT role FROM user_groups WHERE group_id = ? AND user_id = ?`,
            [groupId, userId]
        )
        if (!membership || !canReviewGroupApplications(membership.role)) {
            return NextResponse.json({ ok: false, message: 'Forbidden' }, { status: 403 })
        }

        const limitParam = request.nextUrl.searchParams.get('limit')
        const limit = limitParam ? Number.parseInt(limitParam, 10) : undefined
        const logs = await listGroupLogs(db, groupId, limit)

        return NextResponse.json({ ok: true, data: logs })
    } catch (error: unknown) {
        console.error('Failed to list group logs:', error)
        return NextResponse.json(
            {
                ok: false,
                message: error instanceof Error ? error.message : 'Failed to list family logs',
            },
            { status: 500 }
        )
    }
}
