import { NextResponse } from "next/server";
import {
  verifyPaystackWebhookSignature,
  verifyAndFulfillPaystackPayment,
} from "@/lib/services/payment.service";

export async function POST(req: Request) {
  try {
    const rawBody = await req.text();
    const signature = req.headers.get("x-paystack-signature");

    // 1. Signature Verification
    const isValid = verifyPaystackWebhookSignature(rawBody, signature);
    if (!isValid) {
      console.warn("[Paystack Webhook] Invalid webhook signature received");
      return NextResponse.json({ error: "Invalid signature" }, { status: 401 });
    }

    const event = JSON.parse(rawBody);

    // 2. Handle Charge Success Event
    if (event.event === "charge.success") {
      const reference = event.data?.reference;
      if (reference) {
        await verifyAndFulfillPaystackPayment(reference);
      }
    }

    return NextResponse.json({ status: "success" }, { status: 200 });
  } catch (err: unknown) {
    const message = err instanceof Error ? err.message : "Paystack webhook error";
    console.error("[Paystack Webhook Error]:", message);
    return NextResponse.json({ error: message }, { status: 500 });
  }
}
