import { NextResponse } from "next/server";

import { csvDownloadResponse } from "@/lib/csv";
import { requireSuperAdmin } from "@/lib/authorization";
import { exportAdminTableRows } from "@/services/admin-tables.service";

export const dynamic = "force-dynamic";

type Context = { params: Promise<{ table: string }> };

function statusFor(reason: unknown) {
  const message = reason instanceof Error ? reason.message : "UNKNOWN_ERROR";
  if (message === "TABLE_NOT_FOUND") return 404;
  if (message === "PROTECTED_TABLE") return 403;
  return 400;
}

export async function GET(request: Request, { params }: Context) {
  const auth = await requireSuperAdmin(request);
  if (!auth.ok) return auth.response;

  const { table } = await params;
  try {
    const result = await exportAdminTableRows(table);
    const date = new Date().toISOString().slice(0, 10);
    return csvDownloadResponse(
      `${table}-${date}.csv`,
      result.columns,
      result.rows,
    );
  } catch (reason) {
    return NextResponse.json(
      {
        message:
          reason instanceof Error ? reason.message : "Export impossible",
      },
      { status: statusFor(reason) },
    );
  }
}
