import { NextResponse } from 'next/server'
import { prisma } from '@/lib/prisma'
import { safeHandler, requireAuth, AuthError } from '@/lib/auth'

export const GET = safeHandler(async (_req: Request, { params }: { params: Promise<{ routeId: string }> }) => {
  await requireAuth()
  const { routeId } = await params
  const route = await prisma.transportRoute.findUnique({
    where: { id: routeId },
    include: {
      destination: { select: { name: true } },
      pricing: true,
    },
  })
  if (!route) throw new AuthError('Route not found', 404)
  return NextResponse.json(route)
})

export const PUT = safeHandler(async (req: Request, { params }: { params: Promise<{ routeId: string }> }) => {
  await requireAuth(['ADMIN', 'OPERATIONS'])
  const { routeId } = await params
  const data = await req.json()

  const updateData: any = {}
  if (data.destinationId !== undefined) updateData.destinationId = data.destinationId
  if (data.name !== undefined) updateData.name = data.name
  if (data.fromLocation !== undefined) updateData.fromLocation = data.fromLocation
  if (data.toLocation !== undefined) updateData.toLocation = data.toLocation
  if (data.distanceKm !== undefined) updateData.distanceKm = data.distanceKm ? parseFloat(data.distanceKm) : null
  if (data.durationMinutes !== undefined) updateData.durationMinutes = data.durationMinutes ? parseInt(data.durationMinutes) : null
  if (data.isActive !== undefined) updateData.isActive = data.isActive

  const route = await prisma.transportRoute.update({
    where: { id: routeId },
    data: updateData,
  })

  return NextResponse.json(route)
})

export const DELETE = safeHandler(async (_req: Request, { params }: { params: Promise<{ routeId: string }> }) => {
  await requireAuth(['ADMIN'])
  const { routeId } = await params
  await prisma.transportRoute.delete({ where: { id: routeId } })
  return NextResponse.json({ message: 'Deleted' })
})
