// src/app/accept-invitation/[id]/page.tsx
// PUBLIC invitation landing (NOT in the (app) group, and allowlisted in
// proxy.ts) so an invited user who isn't logged in yet can reach it. The page
// reads the raw invitation from the DB (auth.api.getInvitation throws FORBIDDEN
// on an email mismatch, which would hide which address was invited), then lets
// the client component branch on logged-in / mismatch / valid / invalid.
import { eq } from "drizzle-orm";
import { headers } from "next/headers";
import { AcceptInvitation } from "@/components/accept-invitation";
import { auth } from "@/lib/auth";
import { invitation, organization } from "@/lib/db/auth-schema";
import { db } from "@/lib/db/client";

export default async function AcceptInvitationPage({
  params,
}: {
  params: Promise<{ id: string }>;
}) {
  const { id: invitationId } = await params;

  const session = await auth.api.getSession({ headers: await headers() });
  const currentEmail = session?.user.email ?? "";
  const loggedIn = Boolean(session);

  const [row] = await db
    .select({
      email: invitation.email,
      role: invitation.role,
      status: invitation.status,
      expiresAt: invitation.expiresAt,
      orgName: organization.name,
      organizationId: invitation.organizationId,
    })
    .from(invitation)
    .innerJoin(organization, eq(invitation.organizationId, organization.id))
    .where(eq(invitation.id, invitationId))
    .limit(1);

  const expiredOrInvalid =
    row?.status !== "pending" || row.expiresAt < new Date();

  const invitedEmail = row?.email;
  const mismatch =
    loggedIn &&
    !expiredOrInvalid &&
    currentEmail.toLowerCase() !== (invitedEmail ?? "").toLowerCase();

  return (
    <div className="flex min-h-svh flex-col items-center justify-center bg-muted p-6 md:p-10">
      <div className="w-full max-w-sm">
        <AcceptInvitation
          invitationId={invitationId}
          organizationId={row?.organizationId}
          orgName={row?.orgName}
          role={row?.role ?? "member"}
          invitedEmail={invitedEmail}
          currentEmail={currentEmail}
          loggedIn={loggedIn}
          mismatch={mismatch}
          expiredOrInvalid={expiredOrInvalid}
        />
      </div>
    </div>
  );
}
