import type { Metadata } from "next";
import { requirePermission } from "@/lib/auth/session";
import { getBoard, getBoards, getBoardOptions } from "@/lib/kanban/queries";
import { PageHeader } from "@/components/ui/PageHeader";
import { KanbanBoard } from "./KanbanBoard";

export const metadata: Metadata = { title: "Kanban" };

export default async function KanbanPage({
  searchParams,
}: {
  searchParams: Promise<{ board?: string }>;
}) {
  const session = await requirePermission("kanban.view");
  const perms = session.user.permissions ?? [];
  const canUse = perms.includes("kanban.manage");
  const canComment = perms.includes("kanban.comment");
  const canCreateBoard = perms.includes("kanban.create_board");
  const sp = await searchParams;

  const [board, boards, options] = await Promise.all([
    getBoard(sp.board, session.user.id),
    getBoards(session.user.id),
    getBoardOptions(),
  ]);

  // Board-Admin darf Struktur ändern (Spalten/Labels/Farben/Einstellungen).
  const canManageBoard = Boolean(
    board && (board.adminId === session.user.id || perms.includes("admin.access")),
  );

  return (
    <div className="flex flex-col gap-5">
      <PageHeader
        eyebrow="Aufgaben"
        title="Kanbanboard"
        description="Plane und verschiebe Aufgaben per Drag-and-Drop — der Board-Admin gestaltet Spalten und Labels."
      />

      {board ? (
        <KanbanBoard
          board={board}
          boards={boards}
          options={options}
          canUse={canUse}
          canComment={canComment}
          canCreateBoard={canCreateBoard}
          canManageBoard={canManageBoard}
          currentUserId={session.user.id}
        />
      ) : (
        <div className="card" data-reveal>
          <p className="text-muted">
            Es ist noch kein Board eingerichtet. Führe <code>npm run db:seed</code> aus.
          </p>
        </div>
      )}
    </div>
  );
}
