import { logApiError } from "@/lib/api/security";
import { NextResponse } from "next/server";
import { canManageWorkspace } from "@/lib/developers/auth";
import {
  buildGoogleWorkspaceConnectUrl,
  createGoogleWorkspaceState,
  getGoogleWorkspaceRedirectUri,
} from "@/lib/integrations/google-workspace";
import { createRouteClient } from "@/lib/supabase/route";

export async function GET(req: Request) {
  try {
    const supabase = await createRouteClient();
    const {
      data: { user },
    } = await supabase.auth.getUser();

    if (!user) {
      return NextResponse.redirect(new URL("/login", new URL(req.url).origin));
    }

    const url = new URL(req.url);
    const teamId = url.searchParams.get("teamId");
    const manageable = await canManageWorkspace(user.id, teamId);
    if (!manageable) {
      return NextResponse.redirect(
        new URL("/integrations?googleDrive=forbidden", new URL(req.url).origin)
      );
    }

    const redirectUri = getGoogleWorkspaceRedirectUri("google_drive", new URL(req.url).origin);
    const state = createGoogleWorkspaceState({
      userId: user.id,
      teamId,
      issuedAt: Date.now(),
    });

    return NextResponse.redirect(
      buildGoogleWorkspaceConnectUrl({
        state,
        redirectUri,
        scopes: ["https://www.googleapis.com/auth/drive.metadata.readonly"],
      })
    );
  } catch (error) {
    logApiError("Google Drive connect error:", error);
    return NextResponse.redirect(
      new URL("/integrations?googleDrive=not_configured", new URL(req.url).origin)
    );
  }
}
