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

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

  const updateData: any = {}
  if (data.startTime !== undefined) updateData.startTime = data.startTime
  if (data.endTime !== undefined) updateData.endTime = data.endTime || null
  if (data.daysOfWeek !== undefined) updateData.daysOfWeek = data.daysOfWeek || null
  if (data.seasonName !== undefined) updateData.seasonName = data.seasonName
  if (data.startDate !== undefined) updateData.startDate = new Date(data.startDate)
  if (data.endDate !== undefined) updateData.endDate = new Date(data.endDate)
  if (data.adultPrice !== undefined) updateData.adultPrice = parseFloat(data.adultPrice)
  if (data.childPrice !== undefined) updateData.childPrice = parseFloat(data.childPrice)
  if (data.groupPrice !== undefined) updateData.groupPrice = data.groupPrice ? parseFloat(data.groupPrice) : null
  if (data.groupMinSize !== undefined) updateData.groupMinSize = data.groupMinSize ? parseInt(data.groupMinSize) : null
  if (data.currency !== undefined) updateData.currency = data.currency
  if (data.maxBookings !== undefined) updateData.maxBookings = data.maxBookings ? parseInt(data.maxBookings) : null

  const slot = await prisma.activitySlot.update({
    where: { id: slotId },
    data: updateData,
  })

  return NextResponse.json(slot)
})

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