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

export const GET = safeHandler(async (req: Request) => {
  await requireAuth()
  const { searchParams } = new URL(req.url)
  const search = searchParams.get('search') || ''

  const where = search
    ? {
        OR: [
          { name: { contains: search, mode: 'insensitive' as const } },
          { fromLocation: { contains: search, mode: 'insensitive' as const } },
          { toLocation: { contains: search, mode: 'insensitive' as const } },
        ],
      }
    : {}

  const routes = await prisma.transportRoute.findMany({
    where,
    include: {
      destination: { select: { name: true } },
      pricing: true,
    },
    orderBy: { createdAt: 'desc' },
  })

  return NextResponse.json(routes)
})

export const POST = safeHandler(async (req: Request) => {
  await requireAuth(['ADMIN', 'OPERATIONS'])
  const { destinationId, name, fromLocation, toLocation, distanceKm, durationMinutes } = await req.json()

  const route = await prisma.transportRoute.create({
    data: {
      destinationId,
      name,
      fromLocation,
      toLocation,
      distanceKm: distanceKm ? parseFloat(distanceKm) : null,
      durationMinutes: durationMinutes ? parseInt(durationMinutes) : null,
    },
  })

  return NextResponse.json(route, { status: 201 })
})
