import {redirect} from "next/navigation";
import {auth} from "@/auth";
import {prisma} from "@/lib/db/prisma";
import {BookingWizard} from "./booking-wizard";

type NewBookingPageProps = {
  searchParams: Promise<{vehicleId?: string}>;
  params: Promise<{locale: string}>;
};

export default async function NewBookingPage({searchParams, params}: NewBookingPageProps) {
  const {vehicleId} = await searchParams;
  const {locale} = await params;
  const session = await auth();

  if (!session?.user?.id) {
    redirect(`/${locale}/auth/sign-in?callbackUrl=/${locale}/bookings/new${vehicleId ? `?vehicleId=${vehicleId}` : ""}`);
  }

  if (!vehicleId) {
    redirect(`/${locale}/cars`);
  }

  const vehicle = await prisma.vehicle.findFirst({
    where: {id: vehicleId, isPublic: true, status: "AVAILABLE"},
    include: {brand: true, tenant: {include: {branches: {where: {isActive: true}}}}}
  });

  if (!vehicle) {
    redirect(`/${locale}/cars`);
  }

  const user = await prisma.user.findUnique({
    where: {id: session.user.id},
    select: {firstName: true, lastName: true, email: true, phone: true}
  });

  return (
    <div className="mx-auto max-w-3xl px-6 py-10">
      <BookingWizard
        vehicle={{
          id: vehicle.id,
          name: vehicle.name,
          dailyRate: Number(vehicle.dailyRate),
          depositAmount: Number(vehicle.depositAmount),
          primaryImageUrl: vehicle.primaryImageUrl,
          brandName: vehicle.brand.name
        }}
        branches={vehicle.tenant.branches.map((b) => ({
          id: b.id,
          name: b.name,
          city: b.city ?? ""
        }))}
        user={{
          email: session.user.email ?? "",
          firstName: user?.firstName ?? "",
          lastName: user?.lastName ?? "",
          phone: user?.phone ?? ""
        }}
      />
    </div>
  );
}
