import { redirect } from "next/navigation";
import { getCurrentUser } from "@/lib/customerAuth";
import { getCartForUser, getDefaultAddressForUser } from "@/lib/queries";
import { formatKes } from "@/lib/format";
import { placeOrder } from "./action";
import Header from "@/components/header";
import Footer from "@/components/footer";
import CheckoutForm from "@/components/checkOutForm";

export default async function CheckoutPage() {
  const user = await getCurrentUser();
  if (!user) redirect("/account/login?callbackUrl=/checkout");

  const [cart, defaultAddress] = await Promise.all([
    getCartForUser(user.id),
    getDefaultAddressForUser(user.id),
  ]);

  const items = cart?.items ?? [];
  if (items.length === 0) {
    redirect("/cart");
  }

  const subtotal = items.reduce((sum, item) => {
    const unitPrice = Number(item.product.basePrice) + Number(item.variant?.priceDelta ?? 0);
    return sum + unitPrice * item.quantity;
  }, 0);

  const cartSummary = items.map((item) => ({
    name: item.product.name,
    quantity: item.quantity,
    unitPrice: Number(item.product.basePrice) + Number(item.variant?.priceDelta ?? 0),
  }));

  return (
    <>
      <Header />
      <section className="max-w-5xl mx-auto px-4 py-12">
        <h1 className="font-display font-semibold text-3xl uppercase text-ink mb-8">
          Checkout
        </h1>
        <CheckoutForm
          action={placeOrder}
          subtotal={subtotal}
          cartSummary={cartSummary}
          defaultValues={{
            firstName: defaultAddress?.firstName ?? user.firstName ?? "",
            lastName: defaultAddress?.lastName ?? user.lastName ?? "",
            phone: defaultAddress?.phone ?? user.phone ?? "",
            street: defaultAddress?.street ?? "",
            city: defaultAddress?.city ?? "",
            county: defaultAddress?.county ?? "",
          }}
        />
      </section>
      <Footer />
    </>
  );
}