import { NextRequest, NextResponse } from 'next/server'
import { requireAdmin } from '@/lib/adminAuth'
import { prisma } from '@/lib/prisma'

export async function GET(req: NextRequest) {
  const auth = await requireAdmin()
  if ('error' in auth) return auth.error

  const { searchParams } = new URL(req.url)
  const page = Math.max(1, parseInt(searchParams.get('page') ?? '1'))
  const userId = searchParams.get('userId') ? parseInt(searchParams.get('userId')!) : undefined
  const action = searchParams.get('action') ?? undefined
  const desde = searchParams.get('desde') ? new Date(searchParams.get('desde')!) : undefined
  const hasta = searchParams.get('hasta') ? new Date(searchParams.get('hasta')! + 'T23:59:59') : undefined
  const pageSize = 25

  const where = {
    ...(userId ? { userId } : {}),
    ...(action ? { action } : {}),
    ...(desde || hasta
      ? { createdAt: { ...(desde ? { gte: desde } : {}), ...(hasta ? { lte: hasta } : {}) } }
      : {}),
  }

  const [logs, total] = await Promise.all([
    prisma.auditLog.findMany({
      where,
      orderBy: { createdAt: 'desc' },
      skip: (page - 1) * pageSize,
      take: pageSize,
      include: { user: { select: { name: true, email: true } } },
    }),
    prisma.auditLog.count({ where }),
  ])

  const users = await prisma.user.findMany({
    orderBy: { name: 'asc' },
    select: { id: true, name: true },
  })

  return NextResponse.json({ logs, total, page, pageSize, users })
}
