import { auth } from "@/lib/auth";
import { config } from "@/lib/config";
import { db } from "@/lib/db";
import { products } from "@/schema/products";
import { users } from "@/schema/users";
import { eq } from "drizzle-orm";
import { redirect } from "next/navigation";
{{pkStrategyImport}}

const stripe = require("stripe")(config.STRIPE_SECRET_KEY);

export async function POST(req: Request) {
  const session = await auth();

  if (!session?.user?.id) {
    redirect("/signin");
  }

  const user = await db.query.users.findFirst({
    where: eq(users.id, session.user.id),
  });

  if (!user) {
    throw new Error("user not found");
  }

  const formData = await req.formData();

  const slug = formData.get("slug")?.toString();

  if (!slug) {
    throw new Error("slug not found");
  }

  if (slug === "dynamic") {
    const orderId = {{pkFunctionInvoke}}
    try {
      const session = await stripe.checkout.sessions.create({
        customer_email: user.email,
        line_items: [
          {
            price_data: {
              currency: "usd",
              unit_amount: 500,
              product_data: {
                name: `Custom order ${orderId}`,
              },
            },
            quantity: 1,
          },
        ],
        metadata: {
          order_id: orderId,
        },
        mode: "payment",
        success_url: `${req.headers.get("origin")}/confirmation/?success=true`,
        cancel_url: `${req.headers.get("origin")}/confirmation/?canceled=true`,
        allow_promotion_codes: false,
      });
      return Response.redirect(session.url);
    } catch (err: any) {
      console.error(err);
      return Response.json(err.message, { status: 500 });
    }
  }

  const product = await db.query.products.findFirst({
    where: eq(products.slug, slug),
  });

  if (!product) {
    throw new Error("product not found");
  }

  try {
    const session = await stripe.checkout.sessions.create({
      customer_email: user.email,
      line_items: [
        {
          // Provide the exact Price ID (for example, pr_1234) of the product you want to sell
          price: product.stripePriceId,
          quantity: 1,
        },
      ],
      mode: product?.mode,
      success_url: `${req.headers.get("origin")}/confirmation/?success=true`,
      cancel_url: `${req.headers.get("origin")}/confirmation/?canceled=true`,
      allow_promotion_codes: true,
    });
    return Response.redirect(session.url);
  } catch (err: any) {
    console.error(err);
    return Response.json(err.message, { status: 500 });
  }
}
