import type { Metadata } from "next";
import { getTranslations } from "next-intl/server";
import InviteFlow from "@/components/sections/InvitePage/InviteFlow";
import InviteUnavailable from "@/components/sections/InvitePage/InviteUnavailable";
import { decodeInvitePayload, isInviteExpired } from "@/lib/invite";

interface InvitePageProps {
  params: Promise<{ locale: string; uuid: string }>;
  searchParams: Promise<Record<string, string | string[] | undefined>>;
}

const readToken = (value: string | string[] | undefined) =>
  typeof value === "string" ? value : undefined;

export async function generateMetadata({
  searchParams,
}: InvitePageProps): Promise<Metadata> {
  const t = await getTranslations("InvitePage");
  const invite = decodeInvitePayload(readToken((await searchParams).t));

  return {
    title: invite
      ? t("metaTitle", { company: invite.cn })
      : t("invalidTitle"),
    // Personal links should never end up in search results
    robots: { index: false, follow: false },
  };
}

export default async function InvitePage({ searchParams }: InvitePageProps) {
  const invite = decodeInvitePayload(readToken((await searchParams).t));
  const dashboardUrl =
    process.env.NEXT_PUBLIC_DASHBAORD_URL || "https://app.motakamil.sa";

  if (!invite) {
    return <InviteUnavailable reason="invalid" dashboardUrl={dashboardUrl} />;
  }

  // Expired links never reach the join steps
  if (isInviteExpired(invite.x)) {
    return (
      <InviteUnavailable
        reason="expired"
        invite={invite}
        dashboardUrl={dashboardUrl}
      />
    );
  }

  return <InviteFlow invite={invite} dashboardUrl={dashboardUrl} />;
}
