import { NextRequest, NextResponse } from "next/server";
import { isAllowedSatelliteUrl } from "@/lib/satellite-image-allowlist";

export async function GET(request: NextRequest) {
  const url = request.nextUrl.searchParams.get("url");
  if (!url || !isAllowedSatelliteUrl(url)) {
    return NextResponse.json({ message: "URL not on allowlist" }, { status: 400 });
  }

  try {
    const upstream = await fetch(url, {
      headers: { Accept: "image/*" },
      next: { revalidate: 3600 },
    });

    if (!upstream.ok) {
      return NextResponse.json(
        { message: "Upstream image fetch failed" },
        { status: upstream.status },
      );
    }

    const contentType = upstream.headers.get("content-type") ?? "image/png";
    const buffer = await upstream.arrayBuffer();

    return new NextResponse(buffer, {
      status: 200,
      headers: {
        "Content-Type": contentType,
        "Cache-Control": "public, max-age=3600",
      },
    });
  } catch {
    return NextResponse.json({ message: "Failed to fetch image" }, { status: 502 });
  }
}
