import { NextResponse } from "next/server";
import { getReportById } from "@/app/reportes-preview/mock-reports";
import { renderTableToImage } from "@/lib/bot/render-table";
import { DEFAULT_WATERMARK_PRESET } from "@/lib/bot/watermark-preset";

export const dynamic = "force-dynamic";

function parseNumber(value: string | null, fallback: number, min: number, max: number): number {
  const parsed = value ? Number(value) : fallback;
  if (!Number.isFinite(parsed)) return fallback;
  return Math.min(Math.max(parsed, min), max);
}

export async function GET(request: Request, context: { params: Promise<{ id: string }> }) {
  const { id } = await context.params;
  const report = getReportById(id);

  if (!report) {
    return NextResponse.json({ error: "Report preview not found" }, { status: 404 });
  }

  const url = new URL(request.url);
  const opacity = url.searchParams.has("opacity") ? parseNumber(url.searchParams.get("opacity"), DEFAULT_WATERMARK_PRESET.opacity, 0.03, 0.4) : undefined;
  const offsetX = url.searchParams.has("offsetX") ? parseNumber(url.searchParams.get("offsetX"), DEFAULT_WATERMARK_PRESET.offsetX, -20, 20) : undefined;
  const offsetY = url.searchParams.has("offsetY") ? parseNumber(url.searchParams.get("offsetY"), DEFAULT_WATERMARK_PRESET.offsetY, -20, 20) : undefined;
  const stampGapX = url.searchParams.has("stampGapX") ? parseNumber(url.searchParams.get("stampGapX"), DEFAULT_WATERMARK_PRESET.stampGapX, 0, 40) : undefined;
  const stampGapY = url.searchParams.has("stampGapY") ? parseNumber(url.searchParams.get("stampGapY"), DEFAULT_WATERMARK_PRESET.stampGapY, 0, 50) : undefined;
  const fontFamily = url.searchParams.get("fontFamily") || undefined;

  const image = await renderTableToImage(
    { headers: report.headers, rows: report.rows },
    {
      watermarkSubtitle: report.watermarkTitle ?? report.title,
      watermarkOpacity: opacity,
      watermarkOffsetX: offsetX,
      watermarkOffsetY: offsetY,
      watermarkStampGapX: stampGapX,
      watermarkStampGapY: stampGapY,
      watermarkFontFamily: fontFamily,
    }
  );
  if (!image) {
    return NextResponse.json({ error: "Failed to render preview image" }, { status: 500 });
  }

  return new NextResponse(new Uint8Array(image), {
    headers: {
      "Content-Type": "image/png",
      "Cache-Control": "no-store",
    },
  });
}
