import { logApiError } from "@/lib/api/security";
import { NextResponse } from "next/server";
import { canManageWorkspace } from "@/lib/developers/auth";
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 requestedLimit = Number(new URL(req.url).searchParams.get("limit") || "20");
    const limit =
      Number.isFinite(requestedLimit) && requestedLimit > 0
        ? Math.min(requestedLimit, 50)
        : 20;

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

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

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

    const { data, error } = await supabase
      .from("integration_deliveries")
      .select(
        "id, connection_id, user_id, team_id, provider, event_type, payload, response_status, response_body, success, created_at"
      )
      .eq("connection_id", id)
      .eq("provider", "slack")
      .order("created_at", { ascending: false })
      .limit(limit);

    if (error) {
      return NextResponse.json({ error: error.message }, { status: 400 });
    }

    return NextResponse.json({ deliveries: data || [] });
  } catch (error) {
    logApiError("Slack deliveries GET error:", error);
    return NextResponse.json({ error: "Failed to load Slack deliveries" }, { status: 500 });
  }
}
