import { db } from "@/db";
import { enquiries } from "@/db/schema";
import { sql } from "drizzle-orm";

export const dynamic = "force-dynamic";

type Body = {
  name?: string;
  email?: string;
  company?: string;
  subject?: string;
  message?: string;
};

const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

export async function POST(request: Request) {
  let body: Body;
  try {
    body = (await request.json()) as Body;
  } catch {
    return Response.json({ ok: false, error: "Invalid request body." }, { status: 400 });
  }

  const name = (body.name ?? "").trim();
  const email = (body.email ?? "").trim();
  const company = (body.company ?? "").trim();
  const subject = (body.subject ?? "").trim();
  const message = (body.message ?? "").trim();

  if (!name || !EMAIL_RE.test(email) || !message) {
    return Response.json(
      {
        ok: false,
        error: "Please provide your name, a valid email address and a message.",
      },
      { status: 422 },
    );
  }

  try {
    await db.execute(sql`
      CREATE TABLE IF NOT EXISTS enquiries (
        id serial PRIMARY KEY,
        name varchar(160) NOT NULL,
        email varchar(200) NOT NULL,
        company varchar(200),
        subject varchar(220) NOT NULL,
        message text NOT NULL,
        created_at timestamptz NOT NULL DEFAULT now()
      )`);

    const [row] = await db
      .insert(enquiries)
      .values({
        name,
        email,
        company: company || null,
        subject: subject || "New enquiry",
        message,
      })
      .returning({ id: enquiries.id });

    return Response.json({ ok: true, id: row?.id ?? null });
  } catch {
    return Response.json(
      { ok: false, error: "Something went wrong while sending your message." },
      { status: 500 },
    );
  }
}
