import { NextRequest, NextResponse } from 'next/server';
import { dbConnect } from '@/lib/dbConnect';
import { getStripeInstance, createAndFulfillStripeOrderFromSession } from '@/lib/stripe';

// GET /api/payments/verify-session?session_id=...
// Verifies official Stripe Checkout Session payment status and creates/fulfills order ONLY after payment is confirmed paid!
export async function GET(req: NextRequest) {
  try {
    await dbConnect();
    const { searchParams } = new URL(req.url);
    const sessionId = searchParams.get('session_id');

    if (!sessionId) {
      return NextResponse.json(
        { success: false, error: 'session_id query parameter is required' },
        { status: 400 }
      );
    }

    const { stripe } = await getStripeInstance();

    // Retrieve official session status directly from Stripe API
    const session = await stripe.checkout.sessions.retrieve(sessionId);

    if (session.payment_status === 'paid') {
      const order = await createAndFulfillStripeOrderFromSession(session);

      return NextResponse.json({
        success: true,
        message: 'Payment verified, order created, and course access granted successfully',
        paymentStatus: 'paid',
        order,
      });
    } else {
      return NextResponse.json({
        success: false,
        message: `Payment not completed. Current status: ${session.payment_status}`,
        paymentStatus: session.payment_status,
      });
    }
  } catch (error: any) {
    return NextResponse.json(
      { success: false, error: error.message || 'Session verification failed' },
      { status: 500 }
    );
  }
}
