import { audit } from "../../../../../lib/admin-operations";
import { env } from "../../../../../lib/server-env";
import { getAdmin } from "../../../../../lib/admin-auth";
export async function GET(
  _: Request,
  { params }: { params: Promise<{ id: string }> },
) {
  const admin = await getAdmin();
  if (!admin) return Response.json({ error: "unauthorized" }, { status: 401 });
  const { id } = await params;
  const document = await env.DB.prepare(
    "SELECT storage_key,original_name,detected_mime_type FROM documents WHERE id=?",
  )
    .bind(id)
    .first<{
      storage_key: string;
      original_name: string;
      detected_mime_type: string;
    }>();
  if (!document) return Response.json({ error: "not_found" }, { status: 404 });
  const object = await env.FILES.get(document.storage_key);
  if (!object) return Response.json({ error: "not_found" }, { status: 404 });
  await audit(admin.userId, "DOCUMENT_DOWNLOADED", "DOCUMENT", id);
  const name = document.original_name.replace(/[^a-zA-Z0-9._-]/g, "_");
  return new Response(object.body, {
    headers: {
      "content-type": document.detected_mime_type,
      "content-disposition": `attachment; filename="${name}"; filename*=UTF-8''${encodeURIComponent(document.original_name)}`,
      "cache-control": "private, no-store",
      "x-content-type-options": "nosniff",
    },
  });
}
