import { auth } from "@/lib/auth";
import { config } from "@/lib/config";
import { db } from "@/lib/db";
import { users } from "@/schema/users";
import { eq } from "drizzle-orm";
import { redirect } from "next/navigation";
import { subscriptions } from "@/schema/subscriptions";

const stripe = require("stripe")(config.STRIPE_SECRET_KEY);

export async function POST(req: Request) {
  const session = await auth();

  if (!session?.user?.id) {
    return Response.json({ message: "unauthenticated" }, { status: 401 });
  }

  const user = await db.query.users.findFirst({
    where: eq(users.id, session.user.id),
  });

  if (!user) {
    throw new Error("user not found " + session.user.id);
  }

  const returnUrl = `${req.headers.get("origin")}/account`;

  const subscription = await db.query.subscriptions.findFirst({
    where: eq(subscriptions.userId, user.id),
  });

  if (!subscription) {
    throw new Error("subscription not found for user " + session.user.id);
  }

  const portalSession = await stripe.billingPortal.sessions.create({
    customer: subscription.stripeCustomerId,
    return_url: returnUrl,
  });

  redirect(portalSession.url);
}
