import { CustomerPageShell } from "@/app/customer/_components/customer-page-shell";
import { CustomerDiscussionBoardPage } from "@/app/customer/[tenant]/discussion-board/_components/customer-discussion-board-page";
import { DISCUSSION_BOARD_PERMISSION } from "@/app/customer/[tenant]/discussion-board/_lib/discussion-board-route";
import { fetchDiscussionBoardList } 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;
    q?: string;
    status?: string;
    tag_id?: string;
    unread?: string;
  }>;
};

export default async function CustomerDiscussionBoardRoutePage({
  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>
        <CustomerDiscussionBoardPage
          tenant={tenant}
          initialItems={[]}
          initialTags={[]}
          initialTotalCount={0}
          initialPage={1}
          initialPageSize={20}
          initialPageCount={0}
          initialUnreadCount={0}
          initialNotificationUnreadCount={0}
          initialCanCreate={false}
          permissionDenied
        />
      </CustomerPageShell>
    );
  }

  const page = Math.max(1, Number(query.page) || 1);
  const pageSize = Math.min(100, Math.max(1, Number(query.pageSize) || 20));
  const tagId = Number(query.tag_id) || 0;

  const result = await fetchDiscussionBoardList(
    tenant,
    {
      q: query.q ?? "",
      status: query.status ?? "",
      tag_id: tagId > 0 ? tagId : undefined,
      unread: query.unread === "1" || query.unread === "true",
    },
    { page, pageSize },
  );

  return (
    <CustomerPageShell>
      <CustomerDiscussionBoardPage
        tenant={tenant}
        initialItems={result.items}
        initialTags={result.tags}
        initialTotalCount={result.totalCount}
        initialPage={result.page}
        initialPageSize={result.pageSize}
        initialPageCount={result.pageCount}
        initialUnreadCount={result.unreadCount}
        initialNotificationUnreadCount={result.notificationUnreadCount}
        initialCanCreate={result.canCreate}
        initialErrorMessage={result.errorMessage}
      />
    </CustomerPageShell>
  );
}
