import { defaultResponderForAppDir } from "app/api/defaultResponderForAppDir";
import { headers, cookies } from "next/headers";
import { NextResponse } from "next/server";

import { dub } from "@calcom/feature-auth/lib/dub";
import { getServerSession } from "@calcom/feature-auth/lib/getServerSession";
import { IS_DUB_REFERRALS_ENABLED } from "@calcom/lib/constants";

import { buildLegacyRequest } from "@lib/buildLegacyCtx";

export const dynamic = "force-dynamic";

const handler = async () => {
  // Return early if the feature is disabled
  if (!IS_DUB_REFERRALS_ENABLED) {
    return NextResponse.json({ error: "Referrals feature is disabled" }, { status: 404 });
  }

  const session = await getServerSession({ req: buildLegacyRequest(await headers(), await cookies()) });
  if (!session) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }
  const { publicToken } = await dub.embedTokens.referrals({
    programId: process.env.NEXT_PUBLIC_DUB_PROGRAM_ID as string,
    tenantId: session.user.id.toString(),
    partner: {
      name: session?.user.name || session?.user.email || "",
      email: session?.user.email || session?.user.name || "",
      username: session?.user.username || "",
      image: session?.user.image || null,
      tenantId: session?.user.id.toString() || "",
    },
  });

  return NextResponse.json({ publicToken });
};

export const GET = defaultResponderForAppDir(handler);
