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 suppliers = await prisma.supplier.findMany({
    where: search ? {
      OR: [
        { name: { contains: search, mode: 'insensitive' } },
        { code: { contains: search, mode: 'insensitive' } },
        { type: { equals: search.toUpperCase() as any } },
      ],
    } : undefined,
    orderBy: { name: 'asc' },
  })

  return NextResponse.json(suppliers)
})

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

  // Auto-generate code SUP-001, SUP-002, etc.
  const lastSupplier = await prisma.supplier.findFirst({
    where: { code: { startsWith: 'SUP-' } },
    orderBy: { code: 'desc' },
  })

  let nextNum = 1
  if (lastSupplier) {
    const num = parseInt(lastSupplier.code.replace('SUP-', ''), 10)
    if (!isNaN(num)) nextNum = num + 1
  }

  const code = `SUP-${String(nextNum).padStart(3, '0')}`

  const supplier = await prisma.supplier.create({
    data: {
      ...data,
      code,
      contractStart: data.contractStart ? new Date(data.contractStart) : null,
      contractEnd: data.contractEnd ? new Date(data.contractEnd) : null,
    },
  })

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