import { auth } from "@/auth";
import { redirect } from "next/navigation";
import { prisma } from "@/lib/prisma";
import DashboardClient from "./dashboard-client";

export const dynamic = "force-dynamic";

export default async function DashboardHome() {
  const session = await auth();
  if (!session?.user?.id) return redirect("/login");

  const [
    totalProducts,
    totalOrders,
    pendingOrders,
    totalCustomers,
    recentOrders,
    lowStockProducts,
    todaySales,
  ] = await Promise.all([
    prisma.product.count(),
    (prisma as any).order.count(),
    (prisma as any).order.count({ where: { status: "PENDING" } }),
    (prisma as any).customer.count(),
    (prisma as any).order.findMany({
      orderBy: { createdAt: "desc" },
      take: 8,
      include: { customer: true, items: { take: 1, include: { product: true } } },
    }),
    prisma.product.findMany({
      where: { manageStock: true, stockQuantity: { lte: 5 } },
      take: 5,
      include: { images: { take: 1 } },
    }),
    (prisma as any).order.aggregate({
      where: {
        createdAt: { gte: new Date(new Date().setHours(0, 0, 0, 0)) },
        status: { notIn: ["CANCELLED", "REFUNDED"] },
      },
      _sum: { payableAmount: true },
      _count: true,
    }),
  ]);

  const stats = {
    totalProducts,
    totalOrders,
    pendingOrders,
    totalCustomers,
    todayRevenue: todaySales._sum.payableAmount || 0,
    todayOrders: todaySales._count || 0,
  };

  return (
    <DashboardClient
      userRole={(session.user as any).role}
      stats={stats}
      recentOrders={recentOrders}
      lowStockProducts={lowStockProducts}
    />
  );
}
