import { NextResponse } from "next/server";
import nodemailer from "nodemailer";

const CMS_BASE_URL = process.env.NEXT_PUBLIC_CMS_BASE_URL || "";
const EMAIL_USER = process.env.EMAIL_USER || "";
const EMAIL_PASS = process.env.EMAIL_PASS || "";
const EMAIL_TO = process.env.EMAIL_TO || "";

export async function POST(request: Request) {
  if (!CMS_BASE_URL) {
    return NextResponse.json(
      { error: "Missing NEXT_PUBLIC_CMS_BASE_URL on server." },
      { status: 500 }
    );
  }

  const bodyText = await request.text();
  const url = `${CMS_BASE_URL.replace(/\/$/, "")}/api/form-submissions`;

  try {

    const res = await fetch(url, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: bodyText,
    });

    const contentType = res.headers.get("content-type") || "application/json";
    const responseBody = await res.text();


    if (res.ok && EMAIL_USER && EMAIL_PASS && EMAIL_TO) {
      try {
        const transporter = nodemailer.createTransport({
          service: "gmail",
          auth: { user: EMAIL_USER, pass: EMAIL_PASS },
        });

        const payload = JSON.parse(bodyText);
        const formId = payload.form ?? "unknown";
        const submissionData = payload.submissionData
          .map((item: any) => `${item.field}: ${item.value}`)
          .join("\n");

        const mailOptions = {
          from: EMAIL_USER,
          to: EMAIL_TO,
          subject: `Scilly Days: New Newsletter Signup (Form ${formId})`,
          text: `You have received a new newsletter signup from Scilly Days:\n\n${submissionData}`,
        };

        await transporter.sendMail(mailOptions);
      } catch (emailErr) {
        console.error("Failed to send notification email:", emailErr);
      }
    }

    return new NextResponse(responseBody, {
      status: res.status,
      headers: { "Content-Type": contentType },
    });
  } catch (err) {
    console.error("[scilly api] newsletter submission failed:", err);
    return NextResponse.json(
      { error: "Failed to reach CMS form-submissions endpoint." },
      { status: 502 }
    );
  }
}
