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<{ id: string }> }) => {
  await requireAuth()
  const { id } = await params

  const driver = await prisma.driver.findUnique({
    where: { id },
    include: {
      supplier: { select: { name: true } },
      vehicle: { select: { name: true, vehicleType: true, registrationNo: true } },
      operations: {
        take: 10,
        orderBy: { date: 'desc' },
        include: {
          booking: { select: { bookingNo: true } },
        },
      },
    },
  })

  if (!driver) throw new AuthError('Driver not found', 404)
  return NextResponse.json(driver)
})

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

  const driver = await prisma.driver.update({
    where: { id },
    data: {
      name: data.name,
      phone: data.phone,
      email: data.email || null,
      supplierId: data.supplierId,
      vehicleId: data.vehicleId || null,
      licenseNumber: data.licenseNumber || null,
      licenseExpiry: data.licenseExpiry ? new Date(data.licenseExpiry) : null,
      notes: data.notes || null,
      isActive: data.isActive ?? true,
    },
  })

  return NextResponse.json(driver)
})

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