import { NextResponse } from "next/server";
import { getCurrentUser } from "@/lib/auth";
import { getPlan, stripeConfigured, stripeRequest } from "@/lib/billing";
import { prisma } from "@/lib/prisma";

export async function POST(request: Request) {
  const user = await getCurrentUser();
  if (!user) return NextResponse.json({ ok: false, error: "Bitte zuerst anmelden." }, { status: 401 });
  const body = (await request.json()) as { plan?: string };
  const plan = getPlan(String(body.plan ?? "monthly"));
  if (!plan) return NextResponse.json({ ok: false, error: "Unbekannter Tarif." }, { status: 400 });
  if (!stripeConfigured()) {
    return NextResponse.json({ ok: false, error: "Stripe ist noch nicht konfiguriert. Bitte STRIPE_SECRET_KEY und Price-IDs setzen." }, { status: 503 });
  }

  const base = (process.env.NEXT_PUBLIC_SITE_URL ?? "https://toolaro.org").replace(/\/$/, "");
  let customerId = user.stripeCustomerId;
  if (!customerId) {
    const customer = await stripeRequest("customers", { email: user.email, "metadata[userId]": user.id });
    customerId = String(customer.id);
    await prisma.user.update({ where: { id: user.id }, data: { stripeCustomerId: customerId } });
  }

  const session = await stripeRequest("checkout/sessions", {
    mode: "subscription",
    customer: customerId,
    "line_items[0][price]": process.env[plan.stripePriceIdEnv] ?? "",
    "line_items[0][quantity]": "1",
    success_url: `${base}/account?premium=success`,
    cancel_url: `${base}/pricing?premium=cancelled`,
    "metadata[userId]": user.id,
    "metadata[plan]": plan.id,
  });

  return NextResponse.json({ ok: true, url: session.url });
}
