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,
  { params }: { params: Promise<{ id: string }> }
) {
  const session = await getServerSession(authOptions)
  if (!session?.user?.id) {
    return NextResponse.json({ error: 'Não autorizado' }, { status: 401 })
  }

  const { id } = await params

  const processo = await prisma.processoMonitorado.findFirst({
    where: {
      id,
      userId: session.user.id,
    },
    include: {
      publicacoes: {
        orderBy: { dataPublicacao: 'desc' },
      },
      andamentos: {
        orderBy: { dataHora: 'desc' },
      },
    },
  })

  if (!processo) {
    return NextResponse.json({ error: 'Processo não encontrado' }, { status: 404 })
  }

  return NextResponse.json({ processo })
}

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

  const { id } = await params
  const body = await req.json()
  const { status, vara, comarca, parteAutora, parteRe } = body

  const existing = await prisma.processoMonitorado.findFirst({
    where: { id, userId: session.user.id },
  })

  if (!existing) {
    return NextResponse.json({ error: 'Processo não encontrado' }, { status: 404 })
  }

  const processo = await prisma.processoMonitorado.update({
    where: { id },
    data: {
      ...(status && { status }),
      ...(vara !== undefined && { vara }),
      ...(comarca !== undefined && { comarca }),
      ...(parteAutora !== undefined && { parteAutora }),
      ...(parteRe !== undefined && { parteRe }),
    },
  })

  return NextResponse.json({ processo })
}

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

  const { id } = await params

  const existing = await prisma.processoMonitorado.findFirst({
    where: { id, userId: session.user.id },
  })

  if (!existing) {
    return NextResponse.json({ error: 'Processo não encontrado' }, { status: 404 })
  }

  await prisma.processoMonitorado.delete({ where: { id } })

  return NextResponse.json({ success: true })
}
