import { CustomerPageShell } from "@/app/customer/_components/customer-page-shell";
import { CustomerDiscussionNotificationsPage } from "@/app/customer/[tenant]/discussion-board/_components/customer-discussion-notifications-page";
import { DISCUSSION_BOARD_PERMISSION } from "@/app/customer/[tenant]/discussion-board/_lib/discussion-board-route";
import { fetchNotifications } from "@/app/customer/[tenant]/discussion-board/_lib/discussion-board-server-api";
import { getCustomerSessionContext } from "@/lib/frontend-auth/server";

type PageProps = {
  params: Promise<{ tenant: string }>;
  searchParams: Promise<{ page?: string; pageSize?: string }>;
};

export default async function CustomerDiscussionBoardNotificationsPage({
  params,
  searchParams,
}: PageProps) {
  const { tenant } = await params;
  const query = await searchParams;
  const session = await getCustomerSessionContext(tenant);
  const hasPermission = session.permissions.routes.includes(DISCUSSION_BOARD_PERMISSION);

  if (!hasPermission) {
    return (
      <CustomerPageShell>
        <CustomerDiscussionNotificationsPage
          tenant={tenant}
          initialItems={[]}
          initialTotalCount={0}
          initialPage={1}
          initialPageSize={20}
          initialPageCount={0}
          initialUnreadCount={0}
          permissionDenied
        />
      </CustomerPageShell>
    );
  }

  const page = Math.max(1, Number(query.page) || 1);
  const pageSize = Math.min(100, Math.max(1, Number(query.pageSize) || 20));
  const result = await fetchNotifications(tenant, page, pageSize);

  return (
    <CustomerPageShell>
      <CustomerDiscussionNotificationsPage
        tenant={tenant}
        initialItems={result.items}
        initialTotalCount={result.totalCount}
        initialPage={result.page}
        initialPageSize={result.pageSize}
        initialPageCount={result.pageCount}
        initialUnreadCount={result.unreadCount}
        initialErrorMessage={result.errorMessage}
      />
    </CustomerPageShell>
  );
}
