import { readFile } from "node:fs/promises";
import path from "node:path";
import { NextResponse } from "next/server";

export const runtime = "nodejs";

const contentTypes: Record<string, string> = {
  avif: "image/avif",
  jpeg: "image/jpeg",
  jpg: "image/jpeg",
  png: "image/png",
  webp: "image/webp"
};

export async function GET(_request: Request, { params }: { params: Promise<{ path: string[] }> }) {
  const uploadRoot = path.resolve(process.cwd(), "public/uploads");
  const relativePath = (await params).path.join("/");
  const filePath = path.resolve(uploadRoot, relativePath);
  if (!filePath.startsWith(`${uploadRoot}${path.sep}`)) return new NextResponse("Not found", { status: 404 });

  try {
    const data = await readFile(filePath);
    const extension = path.extname(filePath).slice(1).toLowerCase();
    return new NextResponse(new Uint8Array(data), {
      headers: {
        "Content-Type": contentTypes[extension] || "application/octet-stream",
        "Cache-Control": "public, max-age=31536000, immutable",
        "X-Content-Type-Options": "nosniff"
      }
    });
  } catch {
    return new NextResponse("Not found", { status: 404 });
  }
}
