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

function failedRedirect(request: Request, orderNumber?: string) {
  const url = new URL("/payment-failed", request.url);
  if (orderNumber) url.searchParams.set("order", orderNumber);
  return NextResponse.redirect(url);
}

export async function GET(request: Request) {
  const url = new URL(request.url);
  const localOrderId = url.searchParams.get("orderId");
  const paypalOrderId = url.searchParams.get("token");

  if (!localOrderId) {
    return failedRedirect(request);
  }

  const order = await prisma.order.findUnique({
    where: { id: localOrderId },
    include: { paymentLogs: { orderBy: { createdAt: "desc" } } }
  });

  if (!order || order.paymentMethod !== "PAYPAL") {
    return failedRedirect(request);
  }

  if (order.paymentStatus !== "PAID") {
    const paymentLogId = order.paymentLogs.find((log) => log.provider === "PAYPAL")?.id || order.paymentLogs[0]?.id;
    await prisma.order.update({
      where: { id: order.id },
      data: {
        paymentStatus: "FAILED",
        paymentLogs: paymentLogId
          ? {
              update: {
                where: { id: paymentLogId },
                data: {
                  provider: "PAYPAL",
                  status: "FAILED",
                  rawResponse: JSON.stringify({
                    paypalOrderId,
                    status: "CANCELLED",
                    message: "Customer cancelled PayPal checkout."
                  })
                }
              }
            }
          : undefined
      }
    });
  }

  return failedRedirect(request, order.orderNumber);
}
