/* =====================================================================
   POST /api/paypal/create-order — legt eine echte PayPal-Bestellung server-seitig an.

   Wird vom Checkout aufgerufen, bevor der PayPal-Smart-Button überhaupt anzeigt, was zu bezahlen
   ist (`createOrder`-Callback des PayPal-JS-SDK). Der Betrag kommt bewusst von UNS (aus dem im
   Checkout berechneten Gesamtbetrag, den der Browser hier mitschickt) und wird 1:1 an PayPal
   weitergereicht — die eigentliche Sicherheit entsteht erst beim Erfassen der Zahlung (siehe
   capture-order.js), wo der TATSÄCHLICH bei PayPal eingezogene Betrag serverseitig geprüft wird.
   ===================================================================== */

import { json } from "../../_shared/http.js";
import { paypalKonfiguriert, erstellePaypalBestellung } from "../../_shared/paypal.js";

export async function onRequestPost(context) {
  const { request, env } = context;

  if (!paypalKonfiguriert(env)) {
    return json(503, {
      ok: false,
      error: "PayPal ist auf dieser Seite noch nicht eingerichtet (fehlende Zugangsdaten). Bitte eine andere Zahlungsart wählen.",
    });
  }

  let body;
  try {
    body = await request.json();
  } catch {
    return json(400, { ok: false, error: "Ungültige Anfrage." });
  }

  const summe = Number(body.summe);
  if (!Number.isFinite(summe) || summe <= 0) {
    return json(400, { ok: false, error: "Ungültiger Betrag." });
  }

  try {
    const paypalOrderId = await erstellePaypalBestellung(env, summe);
    return json(200, { ok: true, id: paypalOrderId });
  } catch (err) {
    return json(502, { ok: false, error: err instanceof Error ? err.message : "PayPal-Bestellung fehlgeschlagen." });
  }
}
