import { logApiError } from "@/lib/api/security";
import { NextResponse } from "next/server";
import { canManageWorkspace } from "@/lib/developers/auth";
import {
  decryptGitHubToken,
  listGitHubRepositories,
} from "@/lib/integrations/github";
import { createRouteClient } from "@/lib/supabase/route";

export async function GET(
  _req: Request,
  context: { params: Promise<{ id: string }> }
) {
  try {
    const supabase = await createRouteClient();
    const {
      data: { user },
    } = await supabase.auth.getUser();

    if (!user) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
    }

    const { id } = await context.params;
    const { data: connection } = await supabase
      .from("integration_connections")
      .select("id, team_id, provider, secret_encrypted")
      .eq("id", id)
      .eq("provider", "github")
      .maybeSingle();

    if (!connection) {
      return NextResponse.json({ error: "GitHub connection not found" }, { status: 404 });
    }

    const manageable = await canManageWorkspace(user.id, connection.team_id || null);
    if (!manageable) {
      return NextResponse.json({ error: "Forbidden" }, { status: 403 });
    }

    const repos = await listGitHubRepositories(decryptGitHubToken(connection.secret_encrypted));
    return NextResponse.json({ repos });
  } catch (error) {
    logApiError("GitHub repos GET error:", error);
    const message = error instanceof Error ? error.message : "Failed to load GitHub repositories";
    return NextResponse.json({ error: message }, { status: 500 });
  }
}
