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 supplier = await prisma.supplier.findUnique({
    where: { id },
    include: { supplierDocuments: true },
  })
  if (!supplier) throw new AuthError('Supplier not found', 404)
  return NextResponse.json(supplier)
})

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 supplier = await prisma.supplier.update({
    where: { id },
    data: {
      ...data,
      contractStart: data.contractStart ? new Date(data.contractStart) : null,
      contractEnd: data.contractEnd ? new Date(data.contractEnd) : null,
    },
  })

  return NextResponse.json(supplier)
})

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