/* =====================================================================
   POST /api/orders — legt eine Überweisungs-Bestellung (Vorkasse) in D1 an.

   Wird vom Checkout aufgerufen (siehe src/pages/checkout/index.astro), sobald jemand mit
   "Banküberweisung" bestellt. BEWUSST nicht dauerhaft hinter dem Zugangscode-Gate (siehe
   functions/_middleware.js) — sobald der Shop öffentlich ist (SITE_PUBLIC=true), müssen auch
   echte Kund:innen hier bestellen können.

   WICHTIG (seit der echten PayPal-Anbindung): Diese Route legt Bestellungen NUR noch mit dem
   Status "zahlungOffen" an (Geld ist noch nicht da) und lehnt zahlungsart:"paypal" AUSDRÜCKLICH
   ab. Grund: PayPal-Bestellungen dürfen NUR über functions/api/paypal/capture-order.js entstehen,
   nachdem die Zahlung dort server-seitig bei PayPal selbst bestätigt wurde — sonst könnte jemand
   diese Route einfach direkt mit zahlungsart:"paypal" aufrufen und eine "bezahlte" Bestellung
   vortäuschen, ohne je wirklich zu bezahlen (echtes Betrugs-/Verlustrisiko für VanVan). ===================================================================== */

import { json } from "../_shared/http.js";
import { erstelleBestellung } from "../_shared/bestellung-erstellen.js";

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

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

  const zahlungsart = String(body.zahlungsart || "");
  if (zahlungsart === "paypal") {
    return json(400, {
      ok: false,
      error: "PayPal-Bestellungen laufen über den PayPal-Button im Checkout, nicht über diese Route.",
    });
  }
  if (zahlungsart !== "ueberweisung") {
    return json(400, { ok: false, error: "Ungültige oder nicht unterstützte Zahlungsart." });
  }

  const ergebnis = await erstelleBestellung(env, body, { status: "zahlungOffen" });
  if (!ergebnis.ok) {
    return json(ergebnis.httpStatus || 500, { ok: false, error: ergebnis.error });
  }
  return json(201, { ok: true, id: ergebnis.id, bestellnummer: ergebnis.bestellnummer });
}
