import Event from '../../../models/event.js'
import { connectDB } from '../../../utils/mongoose.js'
import { requireAdmin } from '../../../utils/auth.js'

export default defineEventHandler(async (event) => {
  try {
    await requireAdmin(event)

    const eventId = getRouterParam(event, 'id')
    const body = await validateBody(event, adminEventUpdateSchema)

    await connectDB()

    const updateData = {
      ...body,
      startDate: new Date(body.startDate),
      endDate: new Date(body.endDate),
      registrationDeadline: body.registrationDeadline ? new Date(body.registrationDeadline) : null,
      updatedAt: new Date()
    }

    // Handle ticket data
    if (body.tickets) {
      updateData.tickets = {
        enabled: body.tickets.enabled || false,
        public: {
          available: body.tickets.public?.available || false,
          name: body.tickets.public?.name || 'Public Ticket',
          description: body.tickets.public?.description || '',
          price: body.tickets.public?.price || 0,
          quantity: body.tickets.public?.quantity || null,
          sold: body.tickets.public?.sold || 0,
          earlyBirdPrice: body.tickets.public?.earlyBirdPrice || null,
          earlyBirdDeadline: body.tickets.public?.earlyBirdDeadline ? new Date(body.tickets.public.earlyBirdDeadline) : null
        }
      }
    }

    const updatedEvent = await Event.findByIdAndUpdate(
      eventId,
      updateData,
      { new: true, runValidators: true }
    )

    if (!updatedEvent) {
      throw createError({
        statusCode: 404,
        statusMessage: 'Event not found'
      })
    }

    return updatedEvent
  } catch (error) {
    if (error.statusCode) throw error
    console.error('Error updating event:', error)
    throw createError({
      statusCode: 500,
      statusMessage: 'An unexpected error occurred'
    })
  }
})
