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 drivers = await prisma.driver.findMany({
    where: search ? {
      OR: [
        { name: { contains: search, mode: 'insensitive' } },
        { phone: { contains: search, mode: 'insensitive' } },
        { licenseNumber: { contains: search, mode: 'insensitive' } },
      ],
    } : undefined,
    include: {
      supplier: { select: { name: true } },
      vehicle: { select: { name: true, vehicleType: true, registrationNo: true } },
    },
    orderBy: { name: 'asc' },
  })

  return NextResponse.json(drivers)
})

export const POST = safeHandler(async (req: Request) => {
  await requireAuth(['ADMIN', 'OPERATIONS'])
  const data = await req.json()

  const driver = await prisma.driver.create({
    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, { status: 201 })
})
