import { getSessionUser } from "@/lib/auth";
import { isKavenixAdminEmail } from "@/lib/kavenix-admin";
import { buildGoogleSearchConsoleAuthorizeUrl } from "@/lib/google-search-console";
import { resolveOriginFromHeaders } from "@/lib/mail-urls";

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

function redirectToDashboard(request: Request, status: string, returnTo: "blog" | "search") {
  const origin = resolveOriginFromHeaders(request.headers);
  const view = returnTo === "blog" ? "blog" : "search";
  return Response.redirect(new URL(`/kavenix?view=${view}&gsc=${status}`, `${origin}/`), 302);
}

export async function GET(request: Request) {
  const user = await getSessionUser();
  const returnTo = new URL(request.url).searchParams.get("returnTo") === "blog" ? "blog" : "search";

  if (!user || !isKavenixAdminEmail(user.email)) {
    return redirectToDashboard(request, "forbidden", returnTo);
  }

  try {
    const origin = resolveOriginFromHeaders(request.headers);
    const redirectUri = new URL("/api/integrations/google-search-console/callback", `${origin}/`).toString();
    const authorizeUrl = buildGoogleSearchConsoleAuthorizeUrl({
      email: user.email,
      redirectUri,
      returnTo,
    });

    return Response.redirect(authorizeUrl, 302);
  } catch {
    return redirectToDashboard(request, "not-configured", returnTo);
  }
}
