import { NextResponse } from "next/server";
import { notifyAdmin } from "@/lib/email";
import { prisma } from "@/lib/prisma";
import { checkRateLimit, isHoneypotFilled } from "@/lib/rate-limit";
import { contactSchema } from "@/lib/validations";

function tooManyRequests(retryAfterSeconds: number) {
  return NextResponse.json(
    { success: false, message: "Too many requests. Please wait a few minutes and try again.", error: "Too many requests. Please wait a few minutes and try again." },
    { status: 429, headers: { "Retry-After": String(retryAfterSeconds) } }
  );
}

export async function POST(request: Request) {
  const limit = checkRateLimit(request, { route: "support", windowMs: 10 * 60 * 1000, maxAttempts: 5 });
  if (!limit.allowed) return tooManyRequests(limit.retryAfterSeconds);

  const form = await request.formData();
  if (isHoneypotFilled(form.get("companyUrl"))) {
    return NextResponse.json({
      success: true,
      message: "Support ticket received. Our team will review your message and respond as soon as possible."
    });
  }

  const parsed = contactSchema.safeParse(Object.fromEntries(form.entries()));
  if (!parsed.success) return NextResponse.json({ error: "Invalid support ticket" }, { status: 400 });
  const ticket = await prisma.contactTicket.create({ data: parsed.data });
  void notifyAdmin("New support ticket", [
    `Ticket ID: ${ticket.id}`,
    `Requester: ${ticket.fullName}`,
    `Email: ${ticket.email}`,
    `Subject: ${ticket.subject}`,
    "Review path: /admin/contact-tickets"
  ]);
  return NextResponse.json({
    success: true,
    message: "Support ticket received. Our team will review your message and respond as soon as possible."
  });
}
