import { redirect, notFound } from "next/navigation";
import Link from "next/link";
import { isAdminSession, hasPermission, getAllPermissions } from "@/lib/adminAuth";
import { connectDB } from "@/lib/db";
import { ClientPhotoFolder } from "@/models/ClientPhotoFolder";
import { PhotoRating } from "@/models/PhotoRating";
import { Client } from "@/models/Client";
import { listFolderImages } from "@/lib/nextcloud";
import { AdminNavLinks } from "@/components/admin/AdminNavLinks";
import { AdminPageHeader } from "@/components/admin/AdminPageHeader";
import { PhotoApprovalGrid } from "@/components/admin/PhotoApprovalGrid";

export const dynamic = "force-dynamic";

export default async function AdminFolderPage({ params }: { params: Promise<{ folderId: string }> }) {
  if (!(await isAdminSession())) redirect("/de/login?next=%2Fde%2Fadmin%2Forders");

  if (!(await hasPermission("orders_view"))) redirect("/de/account");

  const permissions = await getAllPermissions();
  const { folderId } = await params;

  await connectDB();
  const folder = await ClientPhotoFolder.findById(folderId).lean();
  if (!folder) notFound();

  const [client, images, ratings] = await Promise.all([
    Client.findById(folder.clientId).lean(),
    listFolderImages(folder.nextcloudPath).catch(() => []),
    PhotoRating.find({ folderId }).lean(),
  ]);
  const ratingByFile = new Map(ratings.map((r) => [r.fileName, r]));

  const photos = images.map((fileName) => ({
    fileName,
    stars: ratingByFile.get(fileName)?.stars ?? 0,
    approved: ratingByFile.get(fileName)?.approvedForDownload ?? false,
    note: ratingByFile.get(fileName)?.note ?? "",
  }));

  const backHref = folder.orderId ? `/de/admin/orders/${folder.orderId}` : `/de/admin/clients/${folder.clientId}`;
  const backLabel = folder.orderId ? "Zum Auftrag" : "Zum Kunden";

  return (
    <main className="relative px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <div
        aria-hidden="true"
        className="fixed inset-0 -z-10 pointer-events-none"
        style={{
          background:
            "radial-gradient(ellipse 55% 45% at 88% 15%, rgba(232,200,107,0.10), transparent 62%)," +
            "radial-gradient(ellipse 50% 42% at 8% 85%, rgba(232,200,107,0.07), transparent 65%)",
        }}
      />
      <AdminNavLinks permissions={permissions} />
      <Link href={backHref} className="text-xs text-[var(--rk-ink-muted)] hover:text-[var(--rk-ink)] transition-colors">
        ← {backLabel}
      </Link>
      <div className="mt-4">
        <AdminPageHeader
          title={folder.label || folder.nextcloudPath}
          subtitle={`${client?.name} · ${client?.email} · ${folder.nextcloudPath}`}
        />
      </div>
      <PhotoApprovalGrid
        folderId={folderId}
        clientId={String(folder.clientId)}
        released={Boolean(folder.released)}
        photos={photos}
      />
    </main>
  );
}
