import { prisma } from "@/lib/prisma";
import { getSiteConfig, isMerchEnabled } from "@/lib/site-config";
import AdminProductsClient from "@/components/AdminProductsClient";
import AdminMerchSettings from "@/components/AdminMerchSettings";
import AdminProductStats from "@/components/AdminProductStats";
import {
  collectMerchCategories,
  mergeMerchGroups,
  normalizeMerchCategory,
  parseMerchGroups,
} from "@/lib/merch-config";
import { normalizeMediaUrl } from "@/lib/media-url";

export const dynamic = "force-dynamic";

export default async function AdminMerchPage() {
  const [rows, siteConfig, orderItems] = await Promise.all([
    prisma.product.findMany({
      where: { type: "PHYSICAL" },
      orderBy: { createdAt: "asc" },
    }),
    getSiteConfig(),
    prisma.orderItem.findMany({
      where: { product: { type: "PHYSICAL" } },
      include: { product: true, order: { include: { user: true } } },
    }),
  ]);

  const products = rows.map((p) => ({
    ...p,
    image: normalizeMediaUrl(p.image) ?? p.image,
  }));

  const categories = collectMerchCategories(products);
  const savedGroups = parseMerchGroups(siteConfig.merch_groups);
  const mergedGroups = mergeMerchGroups(categories, savedGroups);

  const productCountByCategory: Record<string, number> = {};
  for (const p of products) {
    const cat = normalizeMerchCategory(p.category);
    productCountByCategory[cat] = (productCountByCategory[cat] ?? 0) + 1;
  }

  return (
    <div className="space-y-8">
      <AdminMerchSettings
        initialEnabled={isMerchEnabled(siteConfig)}
        initialGroups={mergedGroups}
        categories={categories}
        productCountByCategory={productCountByCategory}
      />
      <AdminProductStats items={orderItems} catalog="PHYSICAL" />
      <AdminProductsClient catalog="PHYSICAL" initialProducts={products} />
    </div>
  );
}
