import Event from "../../models/event.js";
import { connectDB } from "../../utils/mongoose.js";
import { requireAdmin } from "../../utils/auth.js";
import { validateBody } from "../../utils/validateBody.js";
import { adminEventCreateSchema } from "../../utils/schemas.js";

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

    const body = await validateBody(event, adminEventCreateSchema);

    await connectDB();

    const eventData = {
      ...body,
      createdBy: admin.email,
      startDate: new Date(body.startDate),
      endDate: new Date(body.endDate),
      registrationDeadline: body.registrationDeadline
        ? new Date(body.registrationDeadline)
        : null,
    };

    // Ensure slug is not included in eventData (let the model generate it)
    delete eventData.slug;

    // Handle ticket data
    if (body.tickets) {
      eventData.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: 0, // Initialize sold count
          earlyBirdPrice: body.tickets.public?.earlyBirdPrice || null,
          earlyBirdDeadline: body.tickets.public?.earlyBirdDeadline
            ? new Date(body.tickets.public.earlyBirdDeadline)
            : null,
        },
      };
    }

    const newEvent = new Event(eventData);

    const savedEvent = await newEvent.save();

    return savedEvent;
  } catch (error) {
    if (error.statusCode) throw error;
    console.error("Error creating event:", error);
    throw createError({
      statusCode: 500,
      statusMessage: error.message || "Failed to create event",
    });
  }
});
