import { NextRequest, NextResponse } from 'next/server'
import { getServerSession } from 'next-auth'
import { authOptions } from '@/lib/auth'
import { prisma } from '@/lib/prisma'

export async function GET(req: NextRequest) {
  const session = await getServerSession(authOptions)
  if (!session?.user?.id) {
    return NextResponse.json({ error: 'Não autorizado' }, { status: 401 })
  }

  const { searchParams } = new URL(req.url)
  const processoId = searchParams.get('processoId')
  const visualizado = searchParams.get('visualizado')
  const tipo = searchParams.get('tipo')
  const dataInicio = searchParams.get('dataInicio')
  const dataFim = searchParams.get('dataFim')
  const limit = parseInt(searchParams.get('limit') || '50')
  const offset = parseInt(searchParams.get('offset') || '0')

  // Busca IDs dos processos do usuário
  const processosDoUsuario = await prisma.processoMonitorado.findMany({
    where: { userId: session.user.id },
    select: { id: true },
  })

  const processoIds = processosDoUsuario.map(p => p.id)

  if (processoIds.length === 0) {
    return NextResponse.json({ publicacoes: [], total: 0 })
  }

  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  const where: any = {
    processoId: processoId ? processoId : { in: processoIds },
  }

  if (visualizado !== null && visualizado !== undefined) {
    where.visualizado = visualizado === 'true'
  }

  if (tipo) {
    where.tipo = tipo
  }

  if (dataInicio || dataFim) {
    where.dataPublicacao = {}
    if (dataInicio) where.dataPublicacao.gte = new Date(dataInicio)
    if (dataFim) where.dataPublicacao.lte = new Date(dataFim)
  }

  const [publicacoes, total] = await Promise.all([
    prisma.publicacao.findMany({
      where,
      orderBy: { dataPublicacao: 'desc' },
      take: limit,
      skip: offset,
      include: {
        processo: {
          select: {
            numeroProcesso: true,
            tribunal: true,
            parteAutora: true,
            parteRe: true,
          },
        },
      },
    }),
    prisma.publicacao.count({ where }),
  ])

  return NextResponse.json({ publicacoes, total })
}
