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

export const metadata: Metadata = { title: "Admin: Subscriptions" };

export default async function AdminSubscriptionsPage() {
  const [packages, subscriptions] = await Promise.all([
    db.subscriptionPackage.findMany({ orderBy: { createdAt: "asc" } }),
    db.subscription.findMany({
      include: {
        user: { select: { id: true, name: true, email: true } },
        package: { select: { id: true, name: true, module: true } },
      },
      orderBy: { createdAt: "desc" },
    }),
  ]);

  return (
    <AdminSubscriptionsClient
      packages={packages.map((p) => ({
        id: p.id,
        name: p.name,
        slug: p.slug,
        module: p.module,
        description: p.description ?? "",
        priceUsd: Number(p.priceUsd),
        priceNgn: Number(p.priceNgn),
        features: (p.features as string[]) ?? [],
        isActive: p.isActive,
        stripePriceIdUsdLive: p.stripePriceIdUsdLive ?? "",
        stripePriceIdNgnLive: p.stripePriceIdNgnLive ?? "",
        stripePriceIdUsdSandbox: p.stripePriceIdUsdSandbox ?? "",
        stripePriceIdNgnSandbox: p.stripePriceIdNgnSandbox ?? "",
      }))}
      subscriptions={subscriptions.map((s) => ({
        id: s.id,
        userId: s.userId,
        userName: s.user?.name ?? "–",
        userEmail: s.user?.email ?? "–",
        packageName: s.package?.name ?? "–",
        packageModule: s.package?.module ?? "–",
        currency: s.currency,
        status: s.status,
        currentPeriodEnd: s.currentPeriodEnd?.toISOString() ?? null,
        stripeSubscriptionId: s.stripeSubscriptionId ?? null,
        createdAt: s.createdAt.toISOString(),
      }))}
    />
  );
}
