import Link from "next/link";
import { CheckCircle, Ticket } from "lucide-react";
import { prisma } from "@/lib/prisma";
import { confirmOrderAndSendTickets } from "@/lib/order-confirm";
import { findApprovedPaymentForOrder, getPayment } from "@/lib/mercadopago";
import { getPaymentStatus } from "@/lib/flow";
import { getPaykuTransaction, isPaykuTransactionPaid } from "@/lib/payku";

export default async function CheckoutSuccessPage({
  searchParams,
}: {
  searchParams: Promise<{
    orderId?: string;
    token?: string;
    payment_id?: string;
    collection_id?: string;
    status?: string;
    collection_status?: string;
  }>;
}) {
  const params = await searchParams;
  const orderId = params?.orderId;
  const flowToken = params?.token;
  const returnedPaymentId = params?.payment_id || params?.collection_id;
  const returnedStatus = params?.status || params?.collection_status;

  // Confirmamos la orden si el webhook no lo hizo aún.
  if (orderId) {
    try {
      const order = await prisma.order.findUnique({
        where: { id: orderId },
        select: { id: true, status: true, paymentGateway: true, paymentId: true, totalAmount: true },
      });

      if (order && order.status !== "PAID") {
        if (order.paymentGateway === "MERCADOPAGO") {
          const accessToken = process.env.MERCADOPAGO_ACCESS_TOKEN || "";
          if (accessToken) {
            let approved = false;
            let realPaymentId: string | null = null;

            if (returnedPaymentId && (returnedStatus === "approved" || !returnedStatus)) {
              const payment = await getPayment(accessToken, returnedPaymentId);
              if (payment?.status === "approved" && payment.external_reference === orderId) {
                approved = true;
                realPaymentId = payment.id;
              }
            }

            if (!approved) {
              const found = await findApprovedPaymentForOrder(
                accessToken,
                orderId,
                order.paymentId
              );
              if (found) {
                approved = true;
                realPaymentId = found.id;
              }
            }

            if (approved) {
              if (realPaymentId && order.paymentId !== realPaymentId) {
                await prisma.order.update({
                  where: { id: orderId },
                  data: { paymentId: realPaymentId },
                });
              }
              await confirmOrderAndSendTickets(orderId);
            }
          }
        } else if (order.paymentGateway === "FLOW") {
          const tokenToCheck = flowToken || order.paymentId;
          if (tokenToCheck) {
            const flowStatus = await getPaymentStatus(tokenToCheck);
            if (flowStatus?.status === 2) {
              await confirmOrderAndSendTickets(orderId);
            }
          }
        } else if (order.paymentGateway === "PAYKU" && order.paymentId) {
          const tx = await getPaykuTransaction(order.paymentId);
          if (isPaykuTransactionPaid(tx, { orderId: order.id, amount: order.totalAmount })) {
            await confirmOrderAndSendTickets(orderId);
          }
        }
      }
    } catch (e) {
      console.error("Checkout success fallback confirm error:", e);
    }
  }

  return (
    <main className="min-h-[60vh] flex items-center justify-center bg-brand-soft px-4 py-16">
      <div className="max-w-md w-full text-center">
        <div className="inline-flex p-4 rounded-full bg-emerald-50 text-emerald-600 mb-6">
          <CheckCircle className="w-16 h-16" />
        </div>
        <h1 className="text-2xl md:text-3xl font-extrabold text-brand-ink mb-4">
          ¡Gracias por tu compra!
        </h1>
        <p className="text-brand-muted mb-6">
          Si tu pago fue aprobado, en breve recibirás un correo con los números con los que participas en el sorteo solidario Concursando con Amor.
        </p>
        <p className="text-sm text-brand-muted mb-8">
          También puedes consultar tus números en cualquier momento con el correo con el que compraste.
        </p>
        <Link
          href="/buscador"
          className="inline-flex items-center gap-2 px-7 py-3 rounded-full bg-brand-gradient text-white font-bold hover:opacity-90 transition"
        >
          <Ticket className="w-5 h-5" />
          Verificar mis boletos
        </Link>
        <div className="mt-8">
          <Link href="/" className="text-brand-muted hover:text-brand-purple text-sm transition-colors">
            Volver al inicio
          </Link>
        </div>
      </div>
    </main>
  );
}
