import type { Metadata } from "next";
import { requirePermission } from "@/lib/auth/session";
import {
  getCloudListing,
  getCloudShareTargets,
  getWritableFolders,
} from "@/lib/cloud/queries";
import { PageHeader } from "@/components/ui/PageHeader";
import { CloudManager } from "./CloudManager";

export const metadata: Metadata = { title: "Cloud-Speicher" };

export const dynamic = "force-dynamic";

type Search = { [key: string]: string | string[] | undefined };

export default async function CloudPage({
  searchParams,
}: {
  searchParams: Promise<Search>;
}) {
  const session = await requirePermission("cloud.view");
  const userId = session.user.id;
  const canManage = Boolean(session.user.permissions?.includes("cloud.manage"));

  const sp = await searchParams;
  const wanted = typeof sp.f === "string" ? sp.f : null;

  // Kein Zugriff auf den gewünschten Ordner → zurück zur Wurzel.
  const listing =
    (await getCloudListing(userId, wanted)) ?? (await getCloudListing(userId, null));

  const [targets, folders] = await Promise.all([
    getCloudShareTargets(),
    getWritableFolders(userId),
  ]);

  return (
    <div className="flex flex-col gap-5">
      <PageHeader
        eyebrow="Ablage"
        title="Cloud-Speicher"
        description="Dateien des Teams an einem Ort — in Ordnern sortiert und gezielt an Personen, Teams oder Rollen freigegeben."
      />
      <CloudManager
        userId={userId}
        listing={listing!}
        targets={targets}
        writableFolders={folders}
        canManage={canManage}
      />
    </div>
  );
}
