/**
 * Cancellation confirmation, `/i/{token}/cancel` (task 2.11, FR-3.2, FR-3.3).
 *
 * This GET renders a confirmation page and changes nothing. The cancellation itself is a
 * POST carrying `confirm: true`, which is what stops a WhatsApp or email link-preview
 * crawler from cancelling someone's RSVP by merely fetching the URL.
 */
import type { Metadata } from "next";
import { notFound } from "next/navigation";

import { CancelConfirm } from "@/components/CancelConfirm";
import { fetchInvitationByToken } from "@/lib/api/server";
import { getDictionary } from "@/lib/i18n";
import { toInvitationView, type Locale } from "@/lib/view-models";

export const dynamic = "force-dynamic";
export const revalidate = 0;

export const metadata: Metadata = {
  robots: { index: false, follow: false },
  referrer: "no-referrer",
};

export default async function CancelPage({
  params,
  searchParams,
}: {
  params: Promise<{ token: string }>;
  searchParams: Promise<{ lang?: string }>;
}) {
  const { token } = await params;
  const { lang } = await searchParams;

  const data = await fetchInvitationByToken(token);
  if (!data) notFound();

  const override: Locale | undefined = lang === "bn" || lang === "en" ? lang : undefined;
  const invitation = toInvitationView(data, token, override);
  const dict = getDictionary(invitation.locale);

  return (
    <main className="mx-auto flex min-h-dvh max-w-md flex-col justify-center gap-6 px-5 py-10">
      <CancelConfirm invitation={invitation} dict={dict} />
    </main>
  );
}
