import { notFound } from "next/navigation";
import { setRequestLocale } from "next-intl/server";
import { connectDB } from "@/lib/db";
import { ClientPhotoFolder } from "@/models/ClientPhotoFolder";
import { PhotoRating } from "@/models/PhotoRating";
import { Order } from "@/models/Order";
import { listFolderImages } from "@/lib/nextcloud";
import { SharedPhotoGallery } from "@/components/SharedPhotoGallery";

// Bewusst kein generateMetadata/buildPageMetadata hier — der Layout-weite
// Standard (robots: noindex) soll für geteilte Foto-Links ausdrücklich
// gelten, das sind keine Seiten, die in einer Google-Suche auftauchen sollen.
export const dynamic = "force-dynamic";

export default async function SharedGalleryPage({
  params,
}: {
  params: Promise<{ locale: string; token: string }>;
}) {
  const { locale, token } = await params;
  setRequestLocale(locale);
  const isEn = locale === "en";

  await connectDB();
  const folder = await ClientPhotoFolder.findOne({
    shareToken: token,
    $or: [{ shareTokenExpiresAt: null }, { shareTokenExpiresAt: { $gte: new Date() } }],
  }).lean();
  if (!folder) notFound();

  const [allImages, linkedOrder, ratings] = await Promise.all([
    listFolderImages(folder.nextcloudPath).catch(() => []),
    folder.orderId ? Order.findById(folder.orderId).select("paid").lean() : null,
    PhotoRating.find({ folderId: folder._id, approvedForDownload: true }).select("fileName").lean(),
  ]);
  // Ein Teilen-Link darf nie mehr zeigen als der Kunde selbst im Konto sieht
  // — nicht freigegebene Fotos bleiben auch hier verborgen, statt für jeden
  // mit dem Link sichtbar zu sein.
  const approvedNames = new Set(ratings.map((r) => r.fileName));
  const images = allImages.filter((name) => approvedNames.has(name));
  const isWatermarked = Boolean(linkedOrder && !linkedOrder.paid);

  return (
    <main className="min-h-screen px-6 pt-32 pb-24">
      <div className="max-w-4xl mx-auto">
        <p className="text-xs uppercase tracking-[0.35em] text-[var(--rk-ink-muted)] text-center">
          {isEn ? "Shared gallery" : "Geteilte Galerie"}
        </p>
        <h1 className="rk-wordmark mt-4 text-2xl text-center">{folder.label || (isEn ? "Photos" : "Fotos")}</h1>
        <p className="mt-2 text-sm text-center text-[var(--rk-ink-muted)]">
          {isEn ? "Shared by Rakku Photography" : "Geteilt von Rakku Photography"}
          {images.length > 0 ? ` · ${images.length} ${isEn ? (images.length === 1 ? "photo" : "photos") : "Fotos"}` : ""}
        </p>
        {isWatermarked && (
          <p className="mt-4 text-xs text-amber-400 text-center max-w-md mx-auto">
            {isEn
              ? "These photos still carry a watermark until the invoice for this shoot is settled."
              : "Diese Fotos sind mit Wasserzeichen versehen, bis die Rechnung für dieses Shooting beglichen ist."}
          </p>
        )}
        <div className="mt-10">
          {images.length === 0 ? (
            <p className="text-sm text-center text-[var(--rk-ink-muted)]">
              {isEn ? "No photos in this gallery yet." : "Noch keine Bilder in dieser Galerie."}
            </p>
          ) : (
            <SharedPhotoGallery imageBaseUrl={`/api/photos/shared/${token}`} fileNames={images} />
          )}
        </div>
      </div>
    </main>
  );
}
