import { NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";
import { getDemoValidDays } from "@/lib/demo-access";

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

/** consolidated audience options shown in the landing demo form */
const DEMO_TYPES = [
  "KG_PRIMARY",
  "HIGH_SCHOOL",
  "PRIMARY_HIGH",
  "COLLEGE_UNI",
  "COACHING",
  "MADRASHA",
];

/** Public endpoint — visitors on the landing page request a product demo. */
export async function POST(req: Request) {
  try {
    const body = await req.json();
    const name = String(body.name ?? "").trim();
    const email = String(body.email ?? "").trim().toLowerCase();
    const phone = String(body.phone ?? "").trim() || null;
    const institutionName = String(body.institutionName ?? "").trim();
    const institutionType = String(body.institutionType ?? "").trim();
    const message = String(body.message ?? "").trim() || null;

    if (!name || !institutionName) {
      return NextResponse.json({ error: "Name and institution are required" }, { status: 400 });
    }
    if (!EMAIL_RE.test(email)) {
      return NextResponse.json({ error: "A valid email is required" }, { status: 400 });
    }
    if (!DEMO_TYPES.includes(institutionType as never)) {
      return NextResponse.json({ error: "Invalid institution type" }, { status: 400 });
    }

    const demo = await prisma.demoRequest.create({
      data: {
        name: name.slice(0, 80),
        email: email.slice(0, 120),
        phone: phone?.slice(0, 30),
        institutionName: institutionName.slice(0, 120),
        institutionType,
        message: message?.slice(0, 1000),
        // the validity window the central admin configured applies to every
        // new demo request (default 10 days)
        validDays: await getDemoValidDays(),
      },
    });

    return NextResponse.json({ ok: true, id: demo.id });
  } catch {
    return NextResponse.json({ error: "Could not submit your request" }, { status: 500 });
  }
}
