import { type NextRequest, NextResponse } from "next/server"
import { createServerClient } from "@/lib/supabase/server"

export async function POST(request: NextRequest) {
  try {
    const body = await request.json()
    const supabase = await createServerClient()

    // Get authenticated user
    const {
      data: { user },
      error: authError,
    } = await supabase.auth.getUser()

    if (authError || !user) {
      return NextResponse.json({ message: "Unauthorized" }, { status: 401 })
    }

    // Create event
    const { data: event, error: insertError } = await supabase
      .from("events")
      .insert({
        name: body.name,
        description: body.description,
        location: body.location,
        country: body.country || "Trinidad and Tobago",
        event_date: body.event_date,
        end_date: body.end_date,
        start_time: body.start_time,
        end_time: body.end_time,
        banner_image_url: body.banner_image_url,
        currency: body.currency,
        timezone: body.timezone,
        status: body.status,
        primary_category: body.primary_category,
        secondary_categories: body.secondary_categories,
        settings: body.settings,
        organizer_id: user.id,
      })
      .select()
      .single()

    if (insertError) {
      console.error("Insert error:", insertError)
      return NextResponse.json({ message: insertError.message }, { status: 400 })
    }

    return NextResponse.json(event)
  } catch (error) {
    console.error("API error:", error)
    return NextResponse.json({ message: "Internal server error" }, { status: 500 })
  }
}

export async function PUT(request: NextRequest) {
  try {
    const body = await request.json()
    const supabase = await createServerClient()

    // Get authenticated user
    const {
      data: { user },
      error: authError,
    } = await supabase.auth.getUser()

    if (authError || !user) {
      return NextResponse.json({ message: "Unauthorized" }, { status: 401 })
    }

    // Update event (RLS will ensure user owns the event)
    const { data: event, error: updateError } = await supabase
      .from("events")
      .update({
        name: body.name,
        description: body.description,
        location: body.location,
        country: body.country,
        event_date: body.event_date,
        end_date: body.end_date,
        start_time: body.start_time,
        end_time: body.end_time,
        banner_image_url: body.banner_image_url,
        currency: body.currency,
        timezone: body.timezone,
        status: body.status,
        primary_category: body.primary_category,
        secondary_categories: body.secondary_categories,
        settings: body.settings,
        updated_at: new Date().toISOString(),
      })
      .eq("id", body.id)
      .eq("organizer_id", user.id)
      .select()
      .single()

    if (updateError) {
      console.error("Update error:", updateError)
      return NextResponse.json({ message: updateError.message }, { status: 400 })
    }

    return NextResponse.json(event)
  } catch (error) {
    console.error("API error:", error)
    return NextResponse.json({ message: "Internal server error" }, { status: 500 })
  }
}
