import type { Metadata } from "next";
import { db } from "@/lib/db";
import { auth } from "@/auth";
import SubscribePage from "./SubscribePage";

export const metadata: Metadata = { title: "Subscribe" };

export default async function Page({
  searchParams,
}: {
  searchParams: Promise<{ required?: string }>;
}) {
  const { required } = await searchParams;

  const session = await auth();
  const userId = session?.user?.id;
  const userModules: string[] = session?.user?.modules ?? [];

  const packages = await db.subscriptionPackage.findMany({
    where: { isActive: true },
    orderBy: { createdAt: "asc" },
  });

  // Which packages does this user already have active?
  const activePackageSlugs = new Set(
    userId
      ? (
          await db.subscription.findMany({
            where: { userId, status: "active" },
            include: { package: { select: { slug: true } } },
          })
        ).map((s) => s.package.slug)
      : []
  );

  return (
    <SubscribePage
      packages={packages.map((p) => ({
        id: p.id,
        name: p.name,
        slug: p.slug,
        description: p.description ?? "",
        priceUsd: Number(p.priceUsd),
        priceNgn: Number(p.priceNgn),
        module: p.module,
        features: (p.features as string[]) ?? [],
        hasUsdLive: !!p.stripePriceIdUsdLive,
        hasUsdSandbox: !!p.stripePriceIdUsdSandbox,
        hasNgnLive: !!p.stripePriceIdNgnLive,
        hasNgnSandbox: !!p.stripePriceIdNgnSandbox,
        isOwned: activePackageSlugs.has(p.slug),
      }))}
      requiredModule={required}
      userModules={userModules}
    />
  );
}
