import { NextRequest, NextResponse } from "next/server";
import Papa from "papaparse";
import {
  getSurveyExportRows,
  parseAnalyticsFilters,
} from "@/lib/queries/analytics-queries";
import { requireSurveyExportAccess } from "@/lib/auth/require-survey-export";

interface RouteParams {
  params: { surveyId: string };
}

export async function GET(request: NextRequest, { params }: RouteParams) {
  const access = await requireSurveyExportAccess(params.surveyId);
  if ("error" in access) {
    return NextResponse.json({ error: access.error }, { status: access.status });
  }

  const filters = parseAnalyticsFilters(
    Object.fromEntries(request.nextUrl.searchParams.entries())
  );

  const exportData = await getSurveyExportRows(
    params.surveyId,
    access.workspaceId,
    filters
  );

  if (!exportData) {
    return NextResponse.json({ error: "Not found" }, { status: 404 });
  }

  const csv = Papa.unparse(exportData.rows, {
    columns: exportData.headers,
  });

  const filename = `survey-${params.surveyId.slice(0, 8)}-responses.csv`;

  return new NextResponse(csv, {
    headers: {
      "Content-Type": "text/csv; charset=utf-8",
      "Content-Disposition": `attachment; filename="${filename}"`,
    },
  });
}
