import { auth } from "@/lib/auth";
import { redirect } from "@/i18n/navigation";
import { setRequestLocale } from "next-intl/server";
import { prisma } from "@/lib/prisma";
import { hasEffectivePermission, canImpersonateBusiness } from "@/lib/session-utils";
import BusinessDetail from "@/components/businesses/BusinessDetail";

export default async function BusinessDetailPage({
  params,
}: {
  params: Promise<{ locale: string; id: string }>;
}) {
  const { locale, id } = await params;
  setRequestLocale(locale);

  const session = await auth();
  if (!session) {
    redirect({ href: "/login", locale });
    return null;
  }

  if (!hasEffectivePermission(session, "BUSINESSES_VIEW")) {
    redirect({ href: "/dashboard", locale });
    return null;
  }

  const business = await prisma.business.findUnique({
    where: { id },
    include: {
      franchises: {
        include: { _count: { select: { locations: true, members: true } } },
        orderBy: { createdAt: "asc" },
      },
      locations: {
        include: {
          franchise: { select: { id: true, name: true } },
          _count: { select: { staff: true } },
        },
        orderBy: [{ isMain: "desc" }, { createdAt: "asc" }],
      },
      members: {
        include: {
          user: { select: { id: true, firstName: true, lastName: true, username: true, email: true, image: true } },
          businessRole: { select: { id: true, name: true } },
        },
        orderBy: { createdAt: "asc" },
      },
      roles: {
        include: {
          permissions: { include: { businessPermission: true } },
          _count: { select: { businessMembers: true, franchiseMembers: true, locationStaff: true } },
        },
        orderBy: [{ isSystem: "desc" }, { createdAt: "asc" }],
      },
    },
  });

  if (!business) {
    redirect({ href: "/dashboard/businesses", locale });
    return null;
  }

  const allUsers = await prisma.user.findMany({
    select: { id: true, firstName: true, lastName: true, username: true, email: true },
    where: { isActive: true },
    orderBy: { firstName: "asc" },
  });

  const businessPermissions = await prisma.businessPermission.findMany({
    orderBy: [{ module: "asc" }, { action: "asc" }],
  });

  const canUpdate = hasEffectivePermission(session, "BUSINESSES_UPDATE");
  const canDelete = hasEffectivePermission(session, "BUSINESSES_DELETE");
  const canManageFranchises =
    hasEffectivePermission(session, "FRANCHISES_CREATE") ||
    hasEffectivePermission(session, "FRANCHISES_UPDATE") ||
    hasEffectivePermission(session, "FRANCHISES_DELETE");
  const canManageLocations =
    hasEffectivePermission(session, "LOCATIONS_CREATE") ||
    hasEffectivePermission(session, "LOCATIONS_UPDATE") ||
    hasEffectivePermission(session, "LOCATIONS_DELETE");
  const canManageRoles =
    hasEffectivePermission(session, "BUSINESS_ROLES_CREATE") ||
    hasEffectivePermission(session, "BUSINESS_ROLES_UPDATE") ||
    hasEffectivePermission(session, "BUSINESS_ROLES_DELETE");
  const canImpersonate = canImpersonateBusiness(session);

  return (
    <BusinessDetail
      business={business}
      allUsers={allUsers}
      businessPermissions={businessPermissions}
      canUpdate={canUpdate}
      canDelete={canDelete}
      canManageFranchises={canManageFranchises}
      canManageLocations={canManageLocations}
      canManageRoles={canManageRoles}
      canImpersonate={canImpersonate}
    />
  );
}
