import { NextRequest, NextResponse } from "next/server"
import { createClient } from "@/lib/supabase/server"
import { createAdminClient } from "@/lib/supabase/admin"

export async function GET(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const { id } = await params
    const supabase = await createClient()

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

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

    // Check if user is admin
    const adminClient = createAdminClient()
    const { data: userProfile } = await adminClient.from("users").select("role").eq("id", user.id).single()
    const isAdmin = userProfile?.role === "admin"

    // Get query parameters for date filtering
    const { searchParams } = new URL(request.url)
    const from = searchParams.get("from")
    const to = searchParams.get("to")

    // Use admin client for admins, regular client for organizers
    const ticketsClient = isAdmin ? adminClient : supabase

    // Verify event access - admins can access any event, organizers only their own
    if (!isAdmin) {
      const { data: event } = await supabase
        .from("events")
        .select("organizer_id")
        .eq("id", id)
        .single()

      if (!event || event.organizer_id !== user.id) {
        return NextResponse.json({ error: "Forbidden" }, { status: 403 })
      }
    }

    // Build query
    let query = ticketsClient
      .from("order_tickets")
      .select("*")
      .eq("event_id", id)
      .order("created_at", { ascending: false })

    // Apply date filters if provided
    if (from) {
      query = query.gte("created_at", from)
    }
    if (to) {
      const toDate = new Date(to)
      toDate.setHours(23, 59, 59, 999)
      query = query.lte("created_at", toDate.toISOString())
    }

    const { data: tickets, error: ticketsError } = await query

    if (ticketsError) {
      console.error("[API] Error fetching tickets:", ticketsError)
      return NextResponse.json({ error: "Failed to fetch tickets" }, { status: 500 })
    }

    return NextResponse.json({ tickets: tickets || [] })
  } catch (error: any) {
    console.error("[API] Error in event tickets route:", error)
    return NextResponse.json({ error: error.message || "Internal server error" }, { status: 500 })
  }
}
