import { NextRequest, NextResponse } from "next/server"
import { prisma } from "@/lib/prisma"

export async function GET(req: NextRequest) {
  try {
    const { searchParams } = new URL(req.url)
    const orderId = searchParams.get("orderId")

    if (!orderId) {
      return NextResponse.json({ error: "Order ID is required" }, { status: 400 })
    }

    const order = await prisma.order.findUnique({
      where: { id: orderId },
      include: {
        items: {
          include: {
            variant: {
              include: {
                product: true
              }
            }
          }
        }
      }
    })

    if (!order) {
      return NextResponse.json({ found: false, message: "Order not found. Please double-check your Order ID." })
    }

    // Determine visual tracking stages based on enum OrderStatus (PENDING, PROCESSING, SHIPPED, DELIVERED, CANCELLED)
    const stages = [
      { key: "PENDING", label: "Order Placed", desc: "We have received your order details and are preparing to process it.", completed: true, active: order.status === "PENDING" },
      { key: "PROCESSING", label: "Processing", desc: "Your items are being packed, quality-checked, and loaded for shipping.", completed: ["PROCESSING", "SHIPPED", "DELIVERED"].includes(order.status), active: order.status === "PROCESSING" },
      { key: "SHIPPED", label: "Shipped & In Transit", desc: "Your package has been dispatched and is currently on its way to your destination.", completed: ["SHIPPED", "DELIVERED"].includes(order.status), active: order.status === "SHIPPED" },
      { key: "DELIVERED", label: "Delivered", desc: "The package has been successfully delivered and signed for.", completed: order.status === "DELIVERED", active: order.status === "DELIVERED" }
    ]

    return NextResponse.json({
      found: true,
      order: {
        id: order.id,
        totalAmount: order.totalAmount,
        status: order.status,
        paymentStatus: order.paymentStatus,
        shippingAddress: order.shippingAddress,
        shippingPhone: order.shippingPhone,
        createdAt: order.createdAt,
        updatedAt: order.updatedAt,
        items: order.items.map(item => ({
          id: item.id,
          quantity: item.quantity,
          price: item.price,
          productTitle: item.variant.product.title,
          thumbnail: item.variant.product.thumbnail,
          color: item.variant.color,
          size: item.variant.size,
          length: item.variant.length
        }))
      },
      stages
    })

  } catch (error: any) {
    console.error("[ORDER_TRACKING_GET_ERROR]", error)
    return NextResponse.json({ error: "Server error querying order tracking details." }, { status: 500 })
  }
}
