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; dayId: string }> }) => {
  await requireAuth()
  const { dayId } = await params
  const data = await req.json()

  const day = await prisma.itineraryDay.update({
    where: { id: dayId },
    data: {
      title: data.title !== undefined ? data.title : undefined,
      description: data.description !== undefined ? data.description : undefined,
      date: data.date ? new Date(data.date) : undefined,
    },
    include: {
      items: {
        orderBy: { sortOrder: 'asc' },
      },
    },
  })

  return NextResponse.json(day)
})

export const DELETE = safeHandler(async (_req: Request, { params }: { params: Promise<{ id: string; dayId: string }> }) => {
  await requireAuth(['ADMIN', 'OPERATIONS'])
  const { id, dayId } = await params

  await prisma.itineraryDay.delete({ where: { id: dayId } })

  // Recalculate booking totalAmount
  const sum = await prisma.bookingItem.aggregate({
    where: { bookingId: id },
    _sum: { totalCost: true },
  })
  await prisma.booking.update({
    where: { id },
    data: { totalAmount: sum._sum.totalCost || 0 },
  })

  return NextResponse.json({ success: true })
})
